問題
次のうち、正しいクラスの宣言はどれですか(2つ選択)
A)
lass C7 {
int x = 1;
public void method() {
var x = "java";
System.out.println(x);
}
}
B)
class C6 {
public void method() {
var x = new ArrayList<>();
x.add(10);
x.add("30");
System.out.println(x);
}
}
C)
class C3 {
public void method() {
var a = 10;
a = "30";
}
}
D)
class C1 {
var x = 100;
}
E)
class C2 {
public void method(int x) {
var x = 10;
}
}
F)
class C5 {
public void method() {
var strVar = null;
}
}
G)
record C4(var x, var y) {
}
解答
A)
lass C7 {
int x = 1;
public void method() {
var x = "java";
System.out.println(x);
}
}
B)
class C6 {
public void method() {
var x = new ArrayList<>();
x.add(10);
x.add("30");
System.out.println(x);
}
}
C)
class C3 {
public void method() {
var a = 10;
a = "30";
}
}
D)
class C1 {
var x = 100;
}
E)
class C2 {
public void method(int x) {
var x = 10;
}
}
F)
class C5 {
public void method() {
var strVar = null;
}
}
G)
record C4(var x, var y) {
}
解説
A)
class C7 {
int x = 1;
public void method() {
var x = "java";
System.out.println(x);
}
}
- 正しい:
var
を使った局所変数の宣言は有効です。method
内のx
はメソッド内でのローカル変数として宣言されています。
B)
class C6 {
public void method() {
var x = new ArrayList<>();
x.add(10);
x.add("30");
System.out.println(x);
}
}
- 正しい:
var
を使用してArrayList
を初期化することは有効です。ただし、型安全性が失われるため、通常は具体的な型を指定することが推奨されますが、文法的には問題ありません。
C)
class C3 {
public void method() {
var a = 10;
a = "30";
}
}
- 不正:
var
を使って初期化した変数a
の型はint
になりますが、その後にString
を代入しようとしているため、型の不一致が発生します。
D)
class C1 {
var x = 100;
}
- 不正:
var
はメソッド内のローカル変数にしか使用できず、クラスのフィールドに使用することはできません。
E)
class C2 {
public void method(int x) {
var x = 10;
}
}
- 不正: メソッドのパラメータ名と同じ名前のローカル変数
x
を宣言していますが、これは不正です。シャドウイングが発生し、コンパイルエラーになります。
F)
class C5 {
public void method() {
var strVar = null;
}
}
- 不正:
var
を使ってnull
で初期化した場合、コンパイラは型を推論できません。そのため、コンパイルエラーになります。
G)
record C4(var x, var y) {
}
- 不正:
record
宣言のパラメータにvar
を使用することはできません。具体的な型を指定する必要があります。
対象資格:Java SE17 認定資格