Java 实现没有类型参数的泛型接口
假设我有一个带有泛型类型的接口Java 实现没有类型参数的泛型接口,java,generics,interface,Java,Generics,Interface,假设我有一个带有泛型类型的接口A: public interface A<T> { T getT(); } …但不提供类型参数 这里发生了什么?是否将A推断为A?是否可以强制用户使用implements语句(如B implements A)写入类型参数 这里发生了什么 因为您将接口实现保留为原始类型,所以返回类型必须是Object。它不会推断返回类型,但是如果您的返回类型是Object,这是Java中的每个对象,那么它可以正常工作 是否可以强制用户使用implements语
A
:
public interface A<T> {
T getT();
}
…但不提供类型参数
这里发生了什么?是否将A
推断为A
?是否可以强制用户使用implements
语句(如B implements A
)写入类型参数
这里发生了什么
因为您将接口实现保留为原始类型,所以返回类型必须是Object
。它不会推断返回类型,但是如果您的返回类型是Object
,这是Java中的每个对象,那么它可以正常工作
是否可以强制用户使用implements语句编写类型参数(如B实现A)
是否强制用户键入?计算机功能强大,但精神控制还有一段距离。好吧,实现classB
的“正确”方法是:
public class B implements A<Integer> {
@Override
public Integer getT() {
return 1;
}
}
公共类B实现了{
@凌驾
公共整数getT(){
返回1;
}
}
以这种方式编写类B
后,您将强制用户仅将该类与Integer
类型一起使用
如果缺少泛型说明符(如您的示例中所示),则会编译代码(因为泛型是擦除),但大多数IDE会产生警告(例如,在Eclipse中,警告是“A是原始类型。对泛型类型A的引用应参数化为B.java”这里发生了什么?
因为Integer扩展了对象,所以它可以正常工作,建议您使用
实施你的问题:
这里发生了什么
由于省略了泛型类型,系统将其推断为Object
public class B implements A<Object> {
...
}
公共类B实现了一个{
...
}
下一个问题:
是否可以强制用户使用工具(如B实现A)写入类型参数
是的,这就是:
interface A<T extends Integer>
接口A
希望这能有所帮助。@johnchen902当我看到“中国人”之前的“a”时,我以为你会大肆宣扬种族主义,在我意识到你是中国人之前:P@johnchen902这有点离题了:p但是是的,台语是准确的。事实上我和你上的是同一所高中。我不想控制用户的思维哈哈。我的意思是我可以通过
接口a
强迫用户给它一个扩展Foo
的类型“它会很好用”-但是B
是A
而不是A
,这有一些含义。呃,我不是OP,但这并不能回答“这里发生了什么?”总之。呃,这是java“类型擦除”,我想写很多,但英语不好,所以很抱歉,你可以用谷歌搜索,我想你可以找到真正的最终细节:public Integer getT()…
在上面的T
是对象
,因为
interface A<T extends Integer>