Javaフィールドを直接使用するかアクセッサメソッドを使用する方が良いですか?同じクラス内。クラス内のJavaフィールドとアクセサメソッド
例:同じクラス内
private ArrayList<String> list;
list.get(0);
または
getList().get(0);
Javaフィールドを直接使用するかアクセッサメソッドを使用する方が良いですか?同じクラス内。クラス内のJavaフィールドとアクセサメソッド
例:同じクラス内
private ArrayList<String> list;
list.get(0);
または
getList().get(0);
それが正常に直接メンバーにアクセスするには、カプセル化と隠ぺいは、クラスの外を対象としています。
あなたがそれについて考えるとき、あなたは直接とにかくそれをアクセス:
private void useList()
{
String temp = getList().get(0); // access "via accessor" ----------+
System.out.println(temp); |
} |
|
public ArrayList<String> getList() |
{ |
return theList; // but you actually directly access it here... <--+
}
あなたが単純か明確であると信じて何をすべき。
コードがウォームアップすると、パフォーマンスの違いは何もありません。私が単純なケースで行ったテストでは、その差は平均して0.1ns未満である可能性があります。
実際には、アクセサメソッドを使用するほうが優れていますが、拡張用に設計されたクラスでのみ使用されます。これは、例えば、Spring Frameworkのコードでは非常に一般的です。 protected
アクセサーメソッドを記述することで、APIのクライアントがオーバーライドしてプライベートフィールドではなく完全に異なるものを提供できるようになります。
メソッドを使用してメンバーにアクセスする(同じクラスの内部からアクセスする場合も同様)ので、コードの保守性が向上します。あなたのクラスの将来のバージョンでは、リストはそのクラスに保存されなくなりましたが、他の場所に保存されることを考慮してください。または、リストの値が導出され、リストをその場で派生させたい場合もあります。このような状況では、ゲッター/セッターメソッドは、作業、バグ、重複したコードを節約することができます。ゲッターで新しいロジックをコーディングするだけで、あなたは行くことができます!したがって、保守性が必要な場合は、getterとsetterを使用してください。