实现无类型参数的通用接口
比方说,我有一个泛型接口A
:实现无类型参数的通用接口
public interface A<T> {
T getT();
}
和类B
实现它:
public class B implements A {
public Integer getT() { return 1; }
}
...但没有给它一个类型参数。
这里会发生什么? A
是否可以推断为A<Integer>
?是否可以强制用户使用implements
语句(如B implements A<Integer>
)写入类型参数?
你的问题:
瓦在这里发生?
由于您遗漏了泛型类型,因此系统将其推断为Object
。你可以做相同的结果如下:
public class B implements A<Object> {
...
}
下一个问题:
是否有可能迫使用户编写类型参数与工具(如B实现A)
是的。这是如何:
interface A<T extends Integer>
希望这会有所帮助。
最后的细节:public Integer getT()...'在上面的'T'是'Object',因为[协变返回类型](http://docs.oracle.com/javase/tutorial/java/javaOO/returnvalue.html) – 2013-05-13 01:01:59
这里会发生什么?
那么,因为你已经将接口实现作为原始类型,返回类型必须是Object
。它不会推断返回类型,但如果返回类型是Object
(它是Java中的每个对象),那么它将正常工作。
是否有可能强制用户使用实现语句编写类型参数(如B实现A)?
强制用户键入它?电脑功能强大,但精神控制还有一段路要走。
我不想控制用户的头脑哈哈。我的意思是,我可以强制用户通过'interface A
好了,“正确”的方式来实现B
类:
public class B implements A<Integer> {
@Override
public Integer getT() {
return 1;
}
}
一旦你正在写的类B
这样你强制用户使用这个类只有Integer
类型。
当泛型说明符丢失时(如您的示例)编译代码(因为泛型是擦除),但大多数IDE会产生警告(例如,在Eclipse中,警告是“A是原始类型。 ?应该参数B.java”
这里会发生什么事 嗯,因为整数扩展对象,所以它会正常工作,建议你添加参数与 实现
“它会正常工作” - 但是'B'是'A'而不是'A
更改为A
呃,我不是OP,但是这并不回答“这里会发生什么?”无论如何。 – 2013-05-12 16:19:54
@ johnchen902在我意识到你是中国人之前,当我看到“a”之前,我以为你会打破种族主义的咆哮,在我意识到你是中国人之前:P – christopher 2013-05-12 07:39:47
@ johnchen902这很漂亮话题:p但是,*人恰恰。事实上,我和你一样去了同一所高中。 – 2013-05-12 07:44:08