【发布时间】:2015-11-06 19:06:49
【问题描述】:
假设我有一个类,其方法使用一些静态最终变量作为常量,但该类中没有其他方法使用它们。
例如,带有 balance 方法的 AVLTree 类使用这些常量来描述旋转的平衡因子
private static final int L_HEAVY = 2;
private static final int LL_HEAVY = 1;
private static final int R_HEAVY = -2;
private static final int RR_HEAVY = -1;
根据 Java 编码约定(例如 Oracle 的代码约定)最好将这些常量放在哪里?
public class AVLTree {
private Node root;
// (1) Here, among members, right after class declaration ?
public AVLTree() {
root = null;
}
...
// (2) Here, just above the method that uses them?
private Node balance(Node node) {
// (3) Here, inside the method that uses them?
if (height(node.left) - height(node.right) == L_HEAVY) {
if (height(node.left.left) - height(node.left.right) == LL_HEAVY) {
...
}
}
if (height(node.left) - height(node.right) == R_HEAVY) {
if (height(node.right.left) - height(node.right.right) == RR_HEAVY) {
...
}
}
return node;
}
...
}
【问题讨论】:
-
我认为它会编译成同样的东西。更多的是你的喜好。这些天使用 IDE,我不确定它到底有多重要。但我会把它放在最明智的风格
-
如果它们在方法之外没有目的/意义,则将它们放入方法中,编译器可能会完全消除它们。如果它们可能在方法之外有目的,即使仅由方法使用,那么将它们放在前面,before 实例字段。尽管编译器可能仍会内联它们,因此一旦编译它们就不会被使用,它们仍然是类定义的一部分并且可以通过反射看到,因此它们确实具有(非常小的)影响。
标签: java oop static constants final