阅读Java 泛型教程。尖括号之间的东西是一个类型参数 - Comparable 是一个泛型类,在这种情况下,尖括号意味着该类可与其他 BigIntegers 进行比较。
对于这种情况的更多说明,请查看Javadocs for Comparable in 1.5。请注意,它被声明为Comparable<T>
,并且该compareTo
方法采用类型的参数T
。T 是一个类型参数,在使用接口时“填充”。因此在这种情况下,声明你实现Comparable<BigInteger>
意味着你必须有一个compareTo(BigInteger o)
方法。另一个类可能实现Comparable<String>
意味着它必须实现一个compareTo(String o)
方法。
希望您能从上面的代码片段中看到好处。在 1.4 中,签名compareTo
只能采用 an,Object
因为所有类型的类都实现了 Comparable,并且无法确切知道需要什么。但是,使用泛型,您可以指定您与特定类具有可比性,然后编写更具体的 compareTo 方法,该方法只将该类作为参数。
这里的好处是双重的。首先,您不需要instanceof
在方法的实现中进行检查和强制转换。其次,编译器可以在编译时进行更多的类型检查——你不能不小心将 String 传递给 implementsComparable<BigInteger>
的东西,因为类型不匹配。编译器能够向您指出这一点要好得多,而不是像在非泛型代码中通常发生的那样导致运行时异常。