6

Java 1.4.2では、クラスはインターフェースをjava.math.BigInteger実装します。ComparableSerializable

Java 1.5.0では、クラスはインターフェースをjava.math.BigInteger実装します。SerializableComparable<BigInteger>

<これは、とについて質問するための単なる例です>。私が本当に疑問に思っているのは、<>ものです。

私の質問は 3 つあります。

  • ステートメントの<BigInteger>部分はどういう意味ですか?implements
  • その構文は何と呼ばれていますか?
  • そしてそれは何をしますか?

<PS: グーグルで検索するのは本当に難しく、そもそも>SO を検索することは不可能<です。>

ありがとう!

4

2 に答える 2

19

Java Generics チュートリアルを読んでください。山かっこの間は型パラメーターです。Comparable はジェネリック クラスです。この場合、山かっこはクラスが他の BigInteger と比較可能であることを意味します。

この場合のもう少し明確にするために、Comparable in 1.5 の Javadoc を見てください。として宣言されていることComparable<T>、およびcompareToメソッドが型の引数を取ることに注意してくださいT。T は、インターフェイスの使用時に「入力」される型パラメーターです。したがって、この場合、実装を宣言することComparable<BigInteger>は、メソッドが必要であることを意味しますcompareTo(BigInteger o)。別のクラスは、メソッドComparable<String>を実装する必要があるという意味を実装する場合がありcompareTo(String o)ます。

うまくいけば、上記のスニペットからの利点を確認できます。1.4 では、すべての種類のクラスが Comparable を実装しており、必要なものを正確に知る方法がなかったため、 の署名はcompareToのみを取ることができました。Objectただし、ジェネリックを使用すると、特定のクラスに関して比較可能であることを指定してから、そのクラスのみをパラメーターとして受け取る、より具体的な compareTo メソッドを作成できます。

ここでの利点は 2 つあります。instanceofまず、メソッドの実装でチェックとキャストを行う必要はありません。次に、コンパイラはコンパイル時にさらに多くの型チェックを実行できますComparable<BigInteger>。型が一致しないため、 String を を実装するものに誤って渡すことはできません。非汎用コードで一般的に発生するような実行時例外を発生させるよりも、コンパイラがこれを指摘できる方がはるかに優れています。

于 2009-01-16T14:21:53.130 に答える
5

ジェネリックだから間違いない

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

Method< ClassName > とはどういう意味ですか?

于 2009-01-16T14:21:14.553 に答える