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

Dan*_*son 1 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);

    }
}
Run Code Online (Sandbox Code Playgroud)

jt-*_*son 8

改成:

private static final char DOT_CHAR = '?';
Run Code Online (Sandbox Code Playgroud)

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

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

在大多数情况下,对于整个方法而言,是使常量在类范围内还是对于方法局部而言,都是一个优先事项。但是,只有在非常有限的情况下才具有非静态最终常数,例如是否在构造函数中分配了该常数,并且因实例而异。