首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有getter的‘'public static final’还是'private static final‘?

带有getter的‘'public static final’还是'private static final‘?
EN

Stack Overflow用户
提问于 2012-04-07 02:45:39
回答 7查看 28.9K关注 0票数 55

在Java中,人们认为变量应该是私有的,以实现更好的封装,但是静态常量呢?这一点:

代码语言:javascript
复制
public static final int FOO = 5;

在结果上等同于这个:

代码语言:javascript
复制
private static final int FOO = 5;
...
public static getFoo() { return FOO; }

但是,哪种做法更好呢?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2012-04-07 02:54:30

在代码中不直接使用常量有一个原因。

假设FOO以后可能会改变(但仍然保持不变),比如public static final int FOO = 10;。不应该破坏任何东西,只要没有人愚蠢到直接硬编码值的地步,对吗?

不是的。Java编译器会将像上面的Foo这样的常量内联到调用代码中,即someFunc(FooClass.FOO);变成了someFunc(5);。现在,如果您重新编译库,而不是调用代码,您可能会在令人惊讶的情况下结束。如果你使用一个函数,就可以避免这种情况-- JIT仍然会很好地优化它,因此不会对性能造成真正的影响。

票数 71
EN

Stack Overflow用户

发布于 2012-04-07 02:47:51

因为最后一个变量不能在以后被修改,如果你打算将它作为一个全局常量使用,那就把它设置为公共的,不需要getter。

票数 10
EN

Stack Overflow用户

发布于 2012-04-07 02:48:23

Getter在这里毫无意义,很可能会被JVM内联。只要坚持使用公共常量即可。

封装背后的思想是保护不必要的变量更改,并隐藏内部表示。对于常量来说,这没有多大意义。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10047802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档