Java Generics与接口继承相结合

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

Arn*_*len 6

省略通用参数时,几乎所有的泛型逻辑都被跳过.确定T的类型将不是"智能",只是看看在该类/接口中定义T的方式.

如果你想使用泛型逻辑,你应该提供泛型参数而不是将它们遗漏 - 它们仍然可以非常好,"通用":

SomeInterface2<? extends Type1> si1;
si1.get().method();
Run Code Online (Sandbox Code Playgroud)