У меня есть этот код:Java Generics вопросы для многожильного типа параметров
public interface IDimension<S extends IDimension<S,T>, T extends Number> extends Comparable<S> {
T toNumber();
default T toBaseNumber() {
return toNumber();
}
S fromNumber(T units);
Class<T> numberType();
}
Когда я реализовать IDimension
, как показано ниже (Implementation1
), я получаю 'Type parameter 'TestBaseSample' is not within its bound; should implement 'IDimension<TestBaseSample<Float,Integer>, java.lang.Long>'
ошибка:
выполнения решений1:
class TestBaseSample<Integer, Float>
implements IDimension<TestBaseSample<Float, Integer>, Long> {
}
Я понимаю, почему «Реализация1» дает ошибку, но не может понять, почему «Реализация2» и «Реализация3» работают?
выполнение решений2:
class TestBaseSample2<Integer, Float>
implements IDimension<TestBaseSample2<Float, Float>, Long> {
}
Implementation3:
class TestBaseSample3<Integer, Float>
implements IDimension<TestBaseSample3<Integer, Integer>, Long> {
}
Вы понимаете, что вы делаете Integer и Float в имена переменных? например. 'class TestBaseSample3' где T и S являются типичными типами. Например, http://ideone.com/Zq4AVt. Возможно, вы должны изменить их на T & S, чтобы это было ясно или сделать их конкретными. 'class TestBaseSample3 реализует ...' –
matt
@matt вы должны превратить это в ответ. –