1

私は次の Java コードを書きましたが、コンパイラがそれについて文句を言うだろうと思っていました。しかし、エラーは発生しませんでした。どうしてこれなの ?

    public static void main(String[] args) {
        Ba ba = new Ba();

        ba.fetchSomeValues();

    }

    public String fetchSomeValues(){
        return "Hello";     
    }

}

fetchSomeValues()「Hello」(文字列)を返すメソッドを呼び出していますが、変数ba.fetchSomeValues();に初期化せずにメインメソッドに含めています。Stringコンパイラは文句を言いません。なぜですか?

4

6 に答える 6

10

戻り値を変数に割り当てる必要はありません。何もする必要はありません

通常、メソッドの戻り値を単に削除することはお勧めしません。

反例は、キーに関連付けられた以前の値を返すMap'sメソッドです。put以前の値があったかどうかを気にしない場合は、単に戻り値を無視します。

Map<Integer, String> map = new HashMap<Integer, String>();
test.put(1, "one"); // we don't assign the return value since we don't care

したがって、一言で言えば、コンパイラは戻り値を気にするかどうかを判断できません。メソッドを使用しているコンテキストで値が重要であり、それを無視する場合にのみ問題になります

于 2012-11-05T16:41:19.067 に答える
5

これは、メソッドの戻り値を無視するために絶対に有効です (ただし、常に推奨されるわけではありません)。

于 2012-11-05T16:41:00.850 に答える
2

この振る舞いはJavaに固有のものではなく、実際、今日のすべての主流の(そしてそれほどではない)言語の標準です。戻り値のみがポイントである副作用のない関数に焦点が当てられているFP言語でも、これは許可されます。

本当に自問する必要があります。すべての戻り値を割り当てるように強制する言語を使用しますか?それは使いやすい言語でしょうか?

于 2012-11-05T16:41:50.707 に答える
2

ba.fetchSomeValues(); 文字列を返し ますが、 (たとえば)左の変数"Hello"がないため、メソッドで作成された値を持つ文字列のオブジェクトは、未使用になりますString s = ba.fetchSomeValues();"Hello"fetchSomeValues()

于 2012-11-05T16:43:45.003 に答える
2

このコードには何も問題はありません。fetchSomeValues() は文字列を返しますが、値を割り当てる必要はありません。通常は String returnedValue = a.fetchSomeValues() と記述できますが、必須ではありません

于 2012-11-05T16:45:03.333 に答える
2

Java では、先ほどわかったように、戻り値を無視できます。

于 2012-11-05T16:40:56.120 に答える