import(完全修飾名によるインポート省略)難易度 標準無料
次のコードの出力として正しいものを選べ(import 文は一切書かれていない)。
1 public class Q10 {
2 public static void main(String[] args) {
3 java.util.List<Integer> list = new java.util.ArrayList<>();
4 list.add(42);
5 System.out.println(list);
6 }
7 }
- A
[42] - Bコンパイルエラー(
import java.util.List;・import java.util.ArrayList;が無い) - C
42(角括弧は付かない) - D実行時に
NoClassDefFoundErrorが発生する(java.utilは事前インポート必須)
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:AAI作成・独立検証済
解説
import は「毎回完全修飾名を書く手間を省くための構文糖衣」であり、必須ではない。
型を使用するたびに完全修飾名(パッケージ名を含むフルネーム)で記述すれば、import 文が無くてもコンパイル・実行できる。
本コードは java.util.List・java.util.ArrayList をそれぞれ完全修飾名で記述しており、意味的には import java.util.*; をした上で List・ArrayList と書くのと同じ。
list.add(42) でオートボクシングされた Integer(42) が追加され、list の toString()(AbstractCollection 由来)は要素をカンマ区切りで [ ] 内に出力する。
- B完全修飾名で書けば
importは不要。java.util.List・java.util.ArrayListと正しく完全修飾されているためコンパイルは通る。 - C
ListのtoString()はコレクションの内容を[ ]で囲んで表示する仕様。単一の数値だけが出力されるわけではない。 - D
java.utilパッケージのクラスは標準ライブラリに含まれ、完全修飾名で参照する限り解決に失敗することはない。
ひっかけ: 「import が無いコードはコンパイルできない」という思い込みが罠。
java.lang パッケージ(String 等)だけが唯一暗黙にインポートされているが、それ以外のパッケージも完全修飾名を使えば import 無しで参照可能。コマンド例と想定される挙動(未実行)
出力: [42]
公式ドキュメント・関連JLS SE11 §6.5.5 Meaning of Type Names↗
AIが作成し、独立した検証を経た解説です(有資格者による監修は経ていません)