1 class test {
2 public static int compare0(Comparable x, Comparable y) {
3 return x.compareTo(y);
4 }
5 public static int compare1(Object x, Object y) {
6 return ((Comparable) x).compareTo((Comparable) y);
7 }
8 public static int compare2(Object x, Object y) {
9 Comparable p = (Comparable) x;
10 Comparable q = (Comparable) y;
11 return (p).compareTo(q);
12 }
13 public static void main(String[] args) {
14 Comparable zero = new Integer(0);
15 Comparable one = new Integer(1);
16 int c = (zero).compareTo(one);
17 }
18 }
上記のコードをコンパイルすると、次の 4 つの警告が生成されます。
% javac -Xlint:unchecked test.java
test.java:3: warning: [unchecked] unchecked call to compareTo(T) as a member of the raw type java.lang.Comparable
return x.compareTo(y);
^
test.java:7: warning: [unchecked] unchecked call to compareTo(T) as a member of the raw type java.lang.Comparable
return ((Comparable) x).compareTo((Comparable) y);
^
test.java:13: warning: [unchecked] unchecked call to compareTo(T) as a member of the raw type java.lang.Comparable
return (p).compareTo(q);
^
test.java:19: warning: [unchecked] unchecked call to compareTo(T) as a member of the raw type java.lang.Comparable
int c = (zero).compareTo(one);
^
4 warnings
さらに多くの亜種を試しましたが、警告は残ります。上記の test.compare メソッドを記述して呼び出す正しい方法は何ですか?
ありがとう!
PS: test.compare は単なる例です。そのような機能は必要ありません。しかし、test.compare のように、署名に Comparable-implementing オブジェクトが必要な関数を実装する必要があります。
PS2: 私は 25 年以上プログラミングをしており、約 10 年前に Java をプログラミングしたこともありますが、現在 Java を使用している (私の仕事で必要とされている) ことは私を凶暴に駆り立てています。経験豊富なプログラマにとって、Java の学習は見た目よりもはるかに困難です。Java の学習に関するものはたくさんありますが、その 99% はせいぜい時代遅れであるか、プログラミングの初心者をランク付けするために売り込まれています (つまり、非常に冗長です)。最悪の場合、まったくのゴミです...上記の質問に対する答えをすぐにゼロにできる Java。