Подтвердить что ты не робот

Ошибка компиляции java generics

У меня есть следующий общий класс:

public class GenericClass<E,T extends Comparable<T>>
{
    public static <E, T extends Comparable<T>> GenericClass<E, T> create()
    {
        return new GenericClass<E, T>();
    }

    private GenericClass()
    {
    }
}

И вот как я его просто использую:

GenericClass<MyClass, Double> set = GenericClass.create();

В компиляции Eclipse отсутствуют ошибки, однако при построении с помощью ant появляется следующая ошибка:

MyClass.java:19: incompatible types; no instance(s) of type variable(s) E,T exist so that GenericClass<E,T> conforms to GenericClass<MyClass,java.lang.Double>
[javac] found   : <E,T>GenericClass<E,T>
[javac] required: GenericClass<MyClass,java.lang.Double>
[javac]             GenericClass<MyClass, Double> set = GenericClass.create();

Спасибо!

4b9b3361

Ответ 1

Попробуйте использовать это:

      GenericClass<String, Double> set = GenericClass.<String,Double>create();

Компилятор Eclipse и javac отличаются своей точностью.

Ответ 2

Ваше выражение GenericClass.create() не имеет указаний на тип, поэтому компилятор не может вывести реальный тип E и T. Вам нужно изменить прототип вашей функции, чтобы помочь компилятору.

Самый простой способ - передать классы.

Пример:

public class GenericClass<E,T extends Comparable<T>> {
    public static <E, T extends Comparable<T>> GenericClass<E, T> create(Class<E> e, Class<T> t) {
        return new GenericClass<E, T>();
    }

    private GenericClass() {
    }
}

GenericClass<MyClass, Double> set = GenericClass.create(MyClass.class, Double.class);