Ответ 1
Попробуйте использовать это:
GenericClass<String, Double> set = GenericClass.<String,Double>create();
Компилятор Eclipse и javac отличаются своей точностью.
У меня есть следующий общий класс:
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();
Спасибо!
Попробуйте использовать это:
GenericClass<String, Double> set = GenericClass.<String,Double>create();
Компилятор Eclipse и javac отличаются своей точностью.
Ваше выражение 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);