dbo*_*tin 4 java generics inheritance interface
我在Java中使用泛型和接口继承有问题.这是一个例子:
public interface Type0 { }
public interface Type1 extends Type0 {
void method();
}
public interface SomeInterface0<T extends Type0> {
T get();
}
public interface SomeInterface1<T extends Type1> extends SomeInterface0<T> { }
Run Code Online (Sandbox Code Playgroud)
现在,当我尝试使用SomeInterface1没有类型参数的类型的字段时,java comiler将SomeInterface1.get()方法结果的类型视为Type0.并且无法编译这样的东西:
...
SomeInterface1 si1;
...
si1.get().method();
Run Code Online (Sandbox Code Playgroud)
那么,为什么SomeInterface1<T extends Type1>有一个默认的vlue T= Type0?
省略通用参数时,几乎所有的泛型逻辑都被跳过.确定T的类型将不是"智能",只是看看在该类/接口中定义T的方式.
如果你想使用泛型逻辑,你应该提供泛型参数而不是将它们遗漏 - 它们仍然可以非常好,"通用":
SomeInterface2<? extends Type1> si1;
si1.get().method();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2252 次 |
| 最近记录: |