假设我们有类X
和通用类Y
:
class X {}
class Y<T extends X> {}
为什么以下声明合法?
Y<? extends Serializable> obj; //I understand this as any type extends X and Serializable
我了解的是
?
表示满足<T extends X>
的任何类型,包括X
本身。因此,实现X
的Serializable
子类适合此处。但是,X
本身不实现Serializable,那么为什么前面的声明起作用? 最佳答案
我了解的是?
表示满足<T extends X>
的任何类型,包括X
本身。
是的,并且您为变量obj
添加了附加限制,该变量?
代表的未知类型必须实现Serializable
。
因此,实现X
的Serializable
子类适合此处。
那就对了。
但是,X
本身不实现Serializable
,那么为什么前面的声明起作用?X
不实现Serializable
没关系-为什么这很重要?extends Serializable
只是添加到类型的附加限制,尤其是对于变量obj
。
请注意,您只能为变量obj
分配一个值,该值是扩展了X
并且还实现Serializable
的类的实例。
// Error! X does not implement Serializable, so this is not allowed
Y<? extends Serializable> obj = new Y<X>();
class Z extends X implements Serializable { ... }
// No problem, since Z extends X and also implements Serializable
Y<? extends Serializable> obj = new Y<Z>();
关于java - Java泛型-具有接口(interface)绑定(bind)问题的通配符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58623320/