【问题标题】:Location of static final constants for method in Java class [closed]Java类中方法的静态最终常量的位置[关闭]
【发布时间】: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


【解决方案1】:

如果您知道现在或将来的任何方法都不会使用这些变量,您可以在方法中将它们设为局部变量。

但是,如果将来有可能变量被其他方法使用(在类内部或由外部类),请将变量公开并将它们放在顶部。

放置不会影响编译,但最好与定义变量和方法的位置保持一致。

【讨论】:

    【解决方案2】:

    最好将所有常量放在类的顶部。

    例如,Sun 的代码约定确定了thisfile 组织。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-19
      • 2019-04-14
      • 1970-01-01
      • 2011-06-02
      • 1970-01-01
      • 2014-02-22
      • 1970-01-01
      相关资源
      最近更新 更多