实现没有类型参数的通用接口

Lai*_*uan 6 java generics interface

假设我有一个A泛型类型的接口:

public interface A<T> {
    T getT();
}
Run Code Online (Sandbox Code Playgroud)

以及B实现它的类:

public class B implements A {
    public Integer getT() { return 1; }
}
Run Code Online (Sandbox Code Playgroud)

...但是没有给它一个类型参数.

这里发生了什么?是否A可以推断A<Integer>?是否可以强制用户使用implements语句(如B implements A<Integer>)写入类型参数?

小智 6

你的问题:

这里发生了什么?

由于您省略了泛型类型,系统推断出它是Object.您可以使用相同的结果完成以下操作:

    public class B implements A<Object> { 
        ...
    }
Run Code Online (Sandbox Code Playgroud)

下一个问题:

是否可以强制用户使用implements编写类型参数(如B实现A)

是.这是如何:

    interface A<T extends Integer> 
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.

  • 最后的细节:`public Integer getT()...`在上面,`T`是`Object`,因为[协变返回类型]而起作用(http://docs.oracle.com/javase/tutorial/java /javaOO/returnvalue.html) (2认同)