私は主にC#の開発者であるため、Javaを最後に使用してからしばらくお待ちください。ゲームに戻ってくるために、私は非常に簡単なアプリケーションを使って、言語の主要な機能のほとんどに触れていました。Javaの場合getterを使用する場合
次のようにgetPlayers()
が定義されている
for (Player player : teamRed.getPlayers()) {
System.out.format("> %s\n", player.getName());
}
:私は次のような問題に出会っあなたにゲッターを使用した場合、過去のある時点で
public Iterable<Player> getPlayers() {
return Collections.unmodifiableList(this.players);
}
、C#やJavaのいずれかがパフォーマンスの問題を持っていましたそれぞれがこのように、繰り返しごとにメソッドを実行します。
Javaがこれまでにこの問題の対象となったことはありますか、それともC#の場合のみでしたか?
個人的には、私はコンパイラがこれを適切に最適化し、実際にgetPlayers
の結果を反復処理する前に一時変数に格納するほどスマートでなければならないと感じます。ていない場合でも、私は何の問題コンパイラに手を助けることがありません:P
([言語仕様に]文の強化見上げてhttps://docs.oracle.com/javase/specs/jls /se7/html/jls-14.html#jls-14.14.2)、「拡張されたfor文は、for文のfor文と同じです」を探します。 'getPlayers()'メソッドは仕様で一度だけ呼び出されます。 –
私はこれが重複していることに同意しません。具体的には、反復処理を行うリストを取得するメソッドを使用することに関連していたことを思い出してください。リンクされた質問は、定義された配列への直接アクセスを使用します。 –
私はJavaがこれまで(1.2以前から)このような問題を抱えていることを覚えていませんし、C#がそのような基本的な監督に苦しんでいたと思っています。 – Kayaman