DEV Community

TANIAOKA, Akihiro
TANIAOKA, Akihiro

Posted on

6章11

このJavaのコードスニペットでは、SampleクラスとMainクラスがあります。Sampleクラスにはプライベートな文字列変数valueがあり、setValueメソッドとgetValueメソッドを通じてアクセスされます。Mainクラスではmainメソッドがあり、ここでSampleクラスのインスタンスを作成し、setValueを呼び出してvalueに値を設定しようとしています。ただし、setValueメソッドは値を設定するだけで何も返さないため、その戻り値をString変数valに割り当てることはできません。このため、コンパイルエラーが発生します。

以下はコメントアウトを追加したコードです。

// Sampleクラスを定義します。
public class Sample {
    // value変数はprivateなので、Sampleクラス内からのみアクセス可能です。
    private String value;

    // value変数の値を設定するためのpublicメソッドです。
    public void setValue(String value) {
        this.value = value;
    }

    // value変数の値を取得するためのpublicメソッドです。
    public String getValue() {
        return this.value;
    }
}

// Mainクラスを定義します。Javaプログラムの実行はこのクラスから開始されます。
public class Main {
    public static void main(String[] args) {
        // Sampleクラスの新しいインスタンスを作成します。
        Sample s = new Sample();
        // setValueメソッドはvoidを返すので、変数に割り当てることはできません。
        // この行はコンパイルエラーを引き起こします。
        String val = s.setValue("hello");
        // valueの値を取得しますが、何もしないため、この値は無視されます。
        s.getValue();
        // val変数の値を出力しようとしますが、valは有効な値を持っていません。
        System.out.println(val);
    }
}
Enter fullscreen mode Exit fullscreen mode

このコードの問題は、setValueメソッドが戻り値として何も返さない (voidを返す) にもかかわらず、mainメソッド内でString val = s.setValue("hello");として、その戻り値をString型の変数valに割り当てようとしている点です。これはJavaの文法に違反しており、valには値を割り当てることができません。

したがって、コードのこの部分を実行しようとすると、コンパイルエラーが発生し、答えは選択肢A「Mainクラスの4行目でコンパイルエラーが発生する」になります。

追記

コンパイルエラーを発生させないようにするには、setValueメソッドの呼び出しから戻り値を受け取ろうとする行を削除または修正する必要があります。setValuevoidを返すため、戻り値を変数に代入することはできません。その代わりに、値を設定した後にgetValueメソッドを使用して値を取得することができます。

以下に修正したコードを示します:

public class Sample {
    private String value;

    public void setValue(String value) {
        this.value = value;
    }

    public String getValue() {
        return this.value;
    }
}

public class Main {
    public static void main(String[] args) {
        Sample s = new Sample();
        s.setValue("hello"); // 値を設定するだけで、何も返しません。

        // getValueを使用して設定された値を取得し、それを変数valに代入します。
        String val = s.getValue(); 

        // val変数の値を出力します。"hello"が出力されるはずです。
        System.out.println(val);
    }
}
Enter fullscreen mode Exit fullscreen mode

この修正により、setValueメソッドが値を設定する役割を果たし、その後getValueメソッドを使用して設定された値を取得しています。これでプログラムは正しくコンパイルされ、期待される結果を出力するはずです。

補足

この設問のポイントを簡単に理解するには以下のことを覚えておくと良いでしょう:

voidメソッドは値を返しません。
setValueは状態を設定するvoidメソッドです。
voidメソッドの結果を変数に代入することはできません。
この知識をもとに、setValueメソッドを呼び出した後に戻り値を変数に代入しようとするコードは誤りであることがわかります。

Top comments (0)