ошибка компиляции java - PullRequest
       17

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

10 голосов
/ 04 февраля 2011

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

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();

Спасибо!

Ответы [ 2 ]

8 голосов
/ 04 февраля 2011

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

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

Компилятор Eclipse и javac отличаются друг от друга допуском.

0 голосов
/ 04 февраля 2011

Ваше выражение 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);
...