6

Java 1.4.2中,类java.math.BigInteger实现接口ComparableSerializable.

Java 1.5.0中,类java.math.BigInteger实现接口SerializableComparable<BigInteger>.

这只是帮助我询问<and的一个例子>。我真正想知道的是<>东西。

我的问题有三个:

  • <BigInteger>声明的一部分是什么implements意思?
  • 那语法叫什么?
  • 它有什么作用?

PS:谷歌搜索真的很难,<而且一>开始就不可能搜索到。<>

谢谢!

4

2 回答 2

19

阅读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>的东西,因为类型不匹配。编译器能够向您指出这一点要好得多,而不是像在非泛型代码中通常发生的那样导致运行时异常。

于 2009-01-16T14:21:53.130 回答
5

我很确定这是泛型

http://java.sun.com/j2se/1.5.0/docs/guide/language/generics.html

我问了类似的东西(C#),它有有用的信息Method<ClassName> 是什么意思?

于 2009-01-16T14:21:14.553 回答