私は現在、Java SE 7 プログラマー試験の準備をしており、Oracle サイトのサンプル問題を解いてみました。私はこれで立ち往生しました:
import java.util.*;
public class Primes2 {
public static void main(String[] args) {
Integer[] primes = {2, 7, 5, 3};
MySort ms = new MySort();
Arrays.sort(primes, ms);
for(Integer p2: primes)
System.out.print(p2 + " ");
}
static class MySort implements Comparator {
public int compare(Integer x, Integer y) {
return y.compareTo(x);
}
}
}
結果は?
A) 2 3 5 7
B) 2 7 5 3
ハ) 7 5 3 2
D) コンパイルが失敗します。
E) 実行時に例外がスローされます。
質問はここにあります: http://education.oracle.com/pls/web_prod-plq-dad/db_pages.getpage?page_id=303&p_certName=SQ1Z0_804
サイトに示されている正解は C です。コードをテストしたところ、Comparator がパラメーター化されており、指定されたコードでは型が示されていなかったため、コンパイルされないことがわかりました。したがって、コンパイラーは比較メソッドのオブジェクト パラメーターを予期していました。Comparator を に変更しComparator<Integer>
たところ、エラーが解消され、期待どおりに動作しました。
私の質問は、元のコードのその宣言が Java 7 の標準を尊重し、コンパイルする必要があるかどうかです。