2012-02-18 28 views
0

如果我有以下代码:通用接口 - Java的

public interface BinaryTree<T extends Comparable<? super T>>{} 

这意味着它接受实现Comparable合适的对象的接口? <?Super T>是什么意思?

接下来的事情,如果我想写一个执行到BinaryTree 班级减速应该怎么样?

回答

3

<? super T>意味着“任何超类(或超接口)的T”(如@GETah引用了文档。)

所以,你的类看起来像public class MyBinaryTree<T extends Comparable<? super T>> implements BinaryTree<T> {...} - 您需要指定MyBinaryTree的通用参数以与接口所需的通用参数兼容。

+0

它有T吗? – 2012-02-18 22:49:18

+0

你能举一个你想要实现的例子吗?如果你已经绑定了一个,为什么还需要另一个'T'?您可以使用任何您需要的其他附加类型的名称(例如'E'或'MY_TYPE'或任何其他类型,但惯例是使用'UPPERCASE')。 – 2012-02-19 06:18:36

2

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); 
    } 
} 

这工作,因为收藏是超类型的所有藏品。

未知类型的祖先(标记为G<? extends X>)允许读取未知类型的实例。
未知类型的后代(标记为G<? super Y>)允许写入未知类型的实例。

0

BinaryTree需要一个类型参数,所述类型参数必须是一类是Comparable与其自身实例其超类,或一个

所以说,如果你有一个类Frobgit,这是宣布为implements Comparable<Frobgit>,这将是一个有效的类型参数BinaryTree。如果它被宣布为implements Comparable<Object>,那也可以。

A BinaryTree必须比较存储在其中的对象,并确保它能够这样做。

0

<? super T>,在documentation说:

的语法?超级T表示未知类型为T

的超类型