使用getter的java“公共静态最终版”还是“私有静态最终版”?
在Java中,人们教导变量应该保持私有以实现更好的封装,但是静态常量呢?这:
public static final int FOO = 5;
结果与此相当:
private static final int FOO = 5;
...
public static getFoo() { return FOO; }
但哪一种做法更好
你可以在下面搜索框中键入要查询的问题!
在Java中,人们教导变量应该保持私有以实现更好的封装,但是静态常量呢?这:
public static final int FOO = 5;
结果与此相当:
private static final int FOO = 5;
...
public static getFoo() { return FOO; }
但哪一种做法更好
# 1 楼答案
如果getFoo结果是costant的,并且不需要在运行时进行评估,那么第一个选项就是
# 2 楼答案
Getter在这里毫无意义,很可能会被JVM内联。只要坚持公众的观点
封装背后的想法是保护变量的不必要更改,并隐藏内部表示。对于常数,这没有多大意义
# 3 楼答案
将类外的变量用作:
如果封装不是你的首要任务。否则,请使用第二个变量,以便公开方法而不是变量
对于代码维护来说,不依赖变量也是一种更好的做法。记住“过早优化是万恶之源”
# 4 楼答案
我将继续使用getFoo(),因为它允许您在未来更改实现,而无需更改客户端代码。正如@Tomasz所指出的,JVM可能会内联到您当前的实现中,因此您需要付出很大的性能代价
# 5 楼答案
不直接在代码中使用常量有一个原因
假设FOO以后可能会改变(但仍然保持不变),比如
public static final int FOO = 10;
。只要没有人愚蠢到直接硬编码值,就不应该破坏任何东西,对吗不会。Java编译器会将上面的Foo之类的常量内联到调用代码中,即
someFunc(FooClass.FOO);
变成someFunc(5);
。现在,如果你重新编译你的库而不是调用代码,你可能会遇到意想不到的情况。如果你使用一个函数,这是可以避免的——JIT仍然可以很好地优化它,所以没有真正的性能影响# 6 楼答案
既然最后一个变量以后不能更改,如果你想把它作为一个全局常量,只需公开它就行了,不需要getter