問題
次のコードの //[ A ] に記述するとコンパイルエラーになるものはどれですか。
public class Main {
public static void main(String... args) {
Item item1 = new Item("Book", 1000);
Item item2 = new Item("Pen", 100);
//[ A ]
}
}
record Item(String name, int price) { }
選択肢
A)
int hashCode = item2.hashCode();
B)
String name = item1.name();
C)
int price = item2.price();
D)
System.out.println(item1);
E)
item2.price = 200;
F)
Item item3 = new Item();
G)
boolean b = item1.equals(item2);
H)
System.out.println(item2.toString());
解答
A)
int hashCode = item2.hashCode();
B)
String name = item1.name();
C)
int price = item2.price();
D)
System.out.println(item1);
E)
item2.price = 200;
F)
Item item3 = new Item();
G)
boolean b = item1.equals(item2);
H)
System.out.println(item2.toString());
解説
A)int hashCode = item2.hashCode();
→ 有効。hashCode()
メソッドは record
に自動的に生成されます。
B)String name = item1.name();
→ 有効。name()
メソッドは record
に自動的に生成されます。
C)int price = item2.price();
→ 有効。price()
メソッドは record
に自動的に生成されます。
D)System.out.println(item1);
→ 有効。toString()
メソッドは record
に自動的に生成されます。
E)item2.price = 200;
→ コンパイルエラー。record
のフィールドはイミュータブルなので、変更できません。
F)Item item3 = new Item();
→ コンパイルエラー。record
はすべてのフィールドを指定する必要があるため、引数なしでインスタンスを作成できません。
G)boolean b = item1.equals(item2);
→ 有効。equals()
メソッドも自動的に生成されます。
H)System.out.println(item2.toString());
→ 有効。toString()
メソッドが自動的に生成されるため、正しく出力されます。
対象資格:Java SE17 認定資格