4

私が割り当てられているプロジェクトで、このコード (もちろん単純化されています) に出くわしました。

方法オプション 1

public myType getSomething(final int pTeamId) {
    this.teamId = pTeamId;
    final ClassABC classABC = new ClassABC(pTeamId);
    ...
    return myType;
}

メソッドの最初の行で、入力パラメーターpTeamIdがプライベート データ メンバーにどのように割り当てられているかに注意してください。teamIdこのデータ メンバーには getter メソッドと setter メソッドがあることに注意してくださいteamId(簡単にするために、あえて含めませんでした。標準の getter/setter ペアであることを知っておいてください)。

したがって、メソッド オプション 1 のように直接渡された入力パラメーターを使用する代わりに、設定したばかりのデータ メンバーのゲッターを呼び出す場合に、このメソッドを別の方法で記述できると思います。

方法オプション 2

public myType getSomething(final int pTeamId) {
    this.teamId = pTeamId;
    final ClassABC classABC = new ClassABC(this.getTeamId());
    ...
    return myType;
}

この質問は些細なことやばかげているように見える人もいるかもしれませんが、私が変更している大規模なコードベースでこの状況に頻繁に遭遇しているので、これにアプローチするための「正しい」方法、メソッドオプション1または方法オプション 2。

このスレッドに出くわしましたが、JavaScript をターゲットにしています: getter 関数の速度と直接アクセス

私の最初の傾向は、方法オプション1を使用することですが、「より速く見える...」 以外に、正当な理由はありません。

他の誰かがより良い理由を提供できますか?

具体的には、

1) このシナリオには、適切な/推奨される規則/技法/慣行がありますか?

2)ある選択肢が他の選択肢よりも優れているのはなぜですか? それらは等しいですか?パフォーマンスの問題はありますか? 等

私が聞いていない質問はありますか? (または、これはすべて過剰分析ですか)?

任意の洞察をいただければ幸いです。

4

1 に答える 1

4

ゲッターには、返さないnull代わりに空の文字列を返すなどのロジックを含めることができます。セッターと同じ。

変数を直接操作すると、そのロジックは実行されません。

これは、誰かが getter および setter ロジックをオーバーライドした場合にも問題になる可能性があります。(これを最終的なものにすることでこれを禁止できます)しかし、これは一般的なことではありません!(私はさらに一歩進んで、それをアンチパターンと呼びます)

常にゲッター/セッターを呼び出すことをお勧めします。実際のパフォーマンスの低下はありません

于 2013-10-29T22:29:38.460 に答える