| 发表于:2007-03-14 10:53:423楼 得分:6 |
范型~~ comparable <t> 第 4 页(共9 页) comparable 接口已经泛型化了,所以实现 comparable 的对象声明它可以与什么类型进行比较。(通常,这是对象本身的类型,但是有时也可能是父类。) public interface comparable <t> { public boolean compareto(t other); } 所以 comparable 接口包含一个类型参数 t,该参数是一个实现 comparable 的类可以与之比较的对象的类型。这意味着如果定义一个实现 comparable 的类,比如 string,就必须不仅声明类支持比较,还要声明它可与什么比较(通常是与它本身比较): public class string implements comparable <string> { ... } 现在来考虑一个二元 max() 方法的实现。您想要接受两个相同类型的参数,二者都是 comparable,并且相互之间是 comparable。幸运的是,如果使用泛型方法和有限制类型参数的话,这相当直观: public static <t extends comparable <t> > t max(t t1, t t2) { if (t1.compareto(t2) > 0) return t1; else return t2; } 在本例中,您定义了一个泛型方法,在类型 t 上泛型化,您约束该类型扩展(实现) comparable <t> 。两个参数都必须是 t 类型,这表示它们是相同类型,支持比较,并且相互可比较。容易! 更好的是,编译器将使用类型推理来确定当调用 max() 时 t 的值表示什么意思。所以根本不用指定 t,下面的调用就能工作: string s = max( "moo ", "bark "); 编译器将计算出 t 的预定值是 string,因此它将进行编译和类型检查。但是如果您试图用不实现 comparable <x> 的 类 x 的参数调用 max(),那么编译器将不允许这样做。 (引自http://www6.software.ibm.com/developerworks/cn/education/java/j-generics/tutorial/j-generics-5-4.html)学要注册 | | |
|