在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; }
但是,这是更好的做法?
还有一个理由,不直接在代码中使用一个常数。
假设FOO可能会改变以后(但仍保持不变),说public static final int FOO = 10;
。 只要没有人是愚蠢的,足以直接硬编码权值应不破坏任何东西?
号Java编译器将内联常数如上面的Foo到调用代码,即someFunc(FooClass.FOO);
变得someFunc(5);
。 现在,如果你重新编译库,但不调用代码,你可以在令人惊讶的情况下结束。 这是可以避免的,如果你使用一个功能 - JIT的仍然优化它就好了,所以没有真正的表现打那里。
由于最终的变量不能再更改,如果你要使用它作为一个全局变量只是让公众没有必要吸气。
吸气剂是毫无意义的在这里和最有可能将被JVM内联。 只要坚持公开不变。
封装背后的理念是保护变量的不必要的变化和隐藏的内部表示。 与常量它并没有多大意义。
使用variales类为外:
public def FOO:Integer = 5;
如果封装是不是你的优先级。 否则,使用第二个变型,让你暴露的方法,而不是变量。
private static final int FOO = 5;
...
public static getFoo() { return FOO; }
也是代码维护一个更好的做法是不依赖于变量。 请记住,“过早的优化是所有罪恶的根源。”
第一种,如果调用getFoo结果costant,而不是需要在运行时进行评估。
使用setter和getter对成员的优点是能够覆盖。 这是无效的静态的“方法”(而不是函数)
还有没有办法定义接口的静态方法。
我会去外地访问
我会留在的getFoo(),因为它可以让你改变在未来实现在不改变客户端代码。 作为@Tomasz指出,在JVM可能会内联当前的实现,所以你付出多大的性能损失。