多类型参数的Java泛型问题
我有以下代码:
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> {
}
我理解为什么“Implementation1”会出现错误,但无法理解“Implementation2”和“Implementation3”为什么会工作
实施2:
class TestBaseSample2<Integer, Float>
implements IDimension<TestBaseSample2<Float, Float>, Long> {
}
实施3:
class TestBaseSample3<Integer, Float>
implements IDimension<TestBaseSample3<Integer, Integer>, Long> {
}
# 1 楼答案
看起来您正在尝试创建一个具体类型,但实际上您正在创建泛型参数并为它们提供java类的名称
考虑第一个例子^ {< CD1> },如果我们将泛型参数更改为t和s
现在,您应该能够创建一个实例,只要
S
是一个长的T
可以是其他任何内容下面是一个简单的例子
# 2 楼答案
从实现中删除所有类型(不要使用类名命名泛型参数,尤其是JDK中的类-使用单个字母):