是直接使用 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”方法可以节省工作、错误和重复代码。您只需在 getter 中编写新逻辑,就可以开始了!因此,如果需要可维护性,请使用 getter 和 setter。
你应该做你认为更简单或更清晰的事情。
一旦代码预热,性能差异就没有了。它测试了我在更简单的情况下所做的测试,平均差异可能小于 0.1 ns。
实际上存在使用访问器方法更好的情况,但仅限于为扩展设计的类。例如,这在 Spring Framework 的代码中非常常见。您可以编写一个protected
访问器方法,然后您的 API 的客户端可以覆盖并提供完全不同的东西而不是您的私有字段。