我应该使该类级别的变量更本地化吗?

时间:2019-03-25 22:41:11

标签: java

我有一个用于一种方法的变量。因此,我的棉短绒告诉我将其本地化。但是我喜欢它是一个类级别的变量,以防其他任何人修改代码并需要使用该变量。如果不是类级别,他们可能会在方法中错过它并创建一个新的重复变量?

我的逻辑合理吗?还是应该将其设置为局部变量?

这是代码:

public class CustomPasswordTransformationMethod extends PasswordTransformationMethod {
    . . . 
    private final char DOT_CHAR = '●';
    . . . 

    public char charAt(int index) {
        if (index < ((length()) - unObfuscated)) return DOT_CHAR;
        return mSource.charAt(index);

    }
}

3 个答案:

答案 0 :(得分:8)

更改为:

private static final char DOT_CHAR = '●';

现在您已经以正确的方式创建了一个类常量,而linter不再建议更改它。

基本上,lint告诉您仅在一个地方使用的私有 instance 变量浪费分配,并且应该位于使用它的一个地方。通过将其声明为静态,可以告诉编译器的一个常量的一个副本,该副本略有不同。静态常量只分配一次-而实例常量将为每个实例创建(并在每个实例的生命周期中继续分配),并且局部常量将为每个方法调用创建并在结束时进行清理呼叫。所有这些都是理论上的-编译器的实际实现可以优化事情。

在大多数情况下,是否使某个方法在整个类中都恒定不变还是局部于局部优先。但是,只有在非常有限的情况下才具有非静态最终常数,例如是否在构造函数中分配了该常数,并且因实例而异。

答案 1 :(得分:1)

对于您来说,在定义常量时,我​​认为最好在类级别上声明它。你的逻辑是合理的。

进一步的阅读可以帮助您:What is the best way to implement constants in Java?

https://google.github.io/styleguide/javaguide.html

答案 2 :(得分:1)

我将其用作局部变量,访问局部变量比访问字段快。