【初心者】Java質問・相談スレッド61【大歓迎】
■ このスレッドは過去ログ倉庫に格納されています
0271デフォルトの名無しさん
05/02/03 08:12:20>JDK1.4以前のコードはJDK5でも認識するんですよね?
はい。
明示的に1.4のコードと指定してコンパイルする(5.0特有の機能を使っているとエラーを出す)場合には,javac のコンパイルオプションとして -source 1.4 を指定して下さい。
>>269のコードでは,5.0のgenericsと,オートボクシング・アンボクシングの機能を使ってます。
オートボクシング・アンボクシングは,今の例なら int 型と Integer クラスの変換が必要になった場面で,暗黙の内に自動的にその変換を行ってくれる機能です。
genericsは,ArrayListに<Integer>を付加することで,listの要素が Integer 型のインスタンスのみであることを保証します。これを使わないと,
ArrayList list = new ArrayList();
list.add(5); // ここはオートボクシングで暗黙の new Integer(5) がなされて Integer 型オブジェクトが入る
int num = list.get(0); // リストから取り出したものが Integer 型オブジェクトとは限らないので,アンボクシングできず,コンパイルエラー発生
となってしまいます。この場合でも,
int num = (Integer)list.get(0);
とすれば,Objectが一度Integerにキャストされた後,更にアンボクシングが働いてint型に変換されますので,警告付きですがコンパイルできます。
ですが,listに Integer しか入れないのであれば,ArrayList<Integer> と明示しておくことが推奨されます。
■ このスレッドは過去ログ倉庫に格納されています