我有一些代码不能用JDK10编译.
我把它减少到下面的例子:
abstract class Base<C extends Comparable<C>> {
C c;
protected Base(C c) {
this.c = c;
}
}
class Derived<O extends Object> extends Base<String> {
Derived(String s) {
super(s);
}
}
class Scratch {
private static void printString(String s) {
System.out.println(s);
}
public static void main(String[] args) {
var d = new Derived("s");
printString(d.c);
}
}
Run Code Online (Sandbox Code Playgroud)
当我打电话printString(d.c)给编译器抱怨时Error:(21, 22) incompatible types: java.lang.Comparable cannot be converted to java.lang.String.
如果我改变
class Derived<O extends Object> extends Base<String> {
到
class Derived extends Base<String> {
的代码按预期工作.
如何在类型上保持类型参数的同时修复代码(因此d.c属于类型java.lang.String)?ODerived
当你声明class Derived<O extends Object>但然后将它初始化为just时new Derived,它就变成了一个原始类型,它会杀死所有泛型.要修复它,用它初始化new Derived<Object>或new Derived<String>什么的来代替.
| 归档时间: |
|
| 查看次数: |
40 次 |
| 最近记录: |