[英]Generic interface - Java
如果我有以下代码:
public interface BinaryTree<T extends Comparable<? super T>>{}
这意味着它是一个接受实现Comparable
对象的对象的接口? <?Super T>
是什么意思?
接下来,如果我想向BinaryTree
写一个实现,那么类减速度应该是什么样子?
<? super T>
<? super T>
表示“ <? super T>
任何超类(或超接口)” (如@GETah引用了文档。)
因此,您的课程类似于public class MyBinaryTree<T extends Comparable<? super T>> implements BinaryTree<T> {...}
public class MyBinaryTree<T extends Comparable<? super T>> implements BinaryTree<T> {...}
-您需要指定MyBinaryTree的通用参数以与接口所需的参数兼容。
Java将“?”定义为未知类型。 对于通用类型G,类型实例G是所有其他类型实例的超类型。
无法将未知类型的变量分配给对象,并且在读取时将其视为对象。
public void foo(G<?> g) {
Object o = g.e; // Allowed
g.e = new Object(); // Not allowed
}
例如,打印整个集合:
void print(Collection<?> c) {
for(Object e: c) {
System.out.println(e);
}
}
之所以可行,是因为Collection是所有集合的超类型。
未知类型的祖先,标记为G<? extends X>
G<? extends X>
,允许读取未知类型的实例。
未知类型的后代,标记为G<? super Y>
G<? super Y>
,允许写入未知类型的实例。
BinaryTree
需要一个类型参数,所述类型参数必须是一个类,这是Comparable
与其自身的情况下, 或它的超类中的一个。
如果你有一个类,所以说Frobgit
,它被声明为implements Comparable<Frobgit>
这将是一个有效的类型参数BinaryTree
。 如果将其声明为implements Comparable<Object>
,那也可以。
BinaryTree
必须比较存储在其中的对象,这确保了它能够这样做。
对于<? super T>
<? super T>
, 文档显示 :
语法? super T表示未知类型,它是T的超类型
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.