繁体   English   中英

通用接口-Java

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM