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... <--+
}
メソッドを介してメンバーにアクセスすると(同じクラス内からメンバーにアクセスする場合も)、コードの保守が容易になります。クラスの将来のバージョンで、リストはそのクラスではなく、他の場所に保存されることを検討してください。または、リスト内の値が派生し、その場でリストを派生させたい場合もあります。このような状況では、「getter / setter」メソッドを使用すると、作業、バグ、および重複したコードを節約できます。ゲッターで新しいロジックをコーディングするだけで、準備完了です。したがって、保守性が必要な場合は、ゲッターとセッターを使用してください。
あなたはあなたがより単純またはより明確であると信じていることをするべきです。
コードがウォームアップすると、パフォーマンスの違いは次のようになります。それは私がより単純なケースで行ったテストであり、その差は平均で0.1ns未満である可能性があります。
実際には、アクセサメソッドを使用する方が優れている場合がありますが、拡張用に設計されたクラスでのみです。これは、たとえば、SpringFrameworkのコードでは非常に一般的です。protected
APIのクライアントがオーバーライドして、プライベートフィールドの代わりに完全に異なるものを提供できるアクセサメソッドを作成できます。