我有一个用于一种方法的变量。因此,我的棉短绒告诉我将其本地化。但是我喜欢它是一个类级别的变量,以防其他任何人修改代码并需要使用该变量。如果不是类级别,他们可能会在方法中错过它并创建一个新的重复变量?
我的逻辑合理吗?还是应该将其设置为局部变量?
这是代码:
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);
}
}
答案 0 :(得分:8)
更改为:
private static final char DOT_CHAR = '●';
现在您已经以正确的方式创建了一个类常量,而linter不再建议更改它。
基本上,lint告诉您仅在一个地方使用的私有 instance 变量浪费分配,并且应该位于使用它的一个地方。通过将其声明为静态,可以告诉编译器类的一个常量的一个副本,该副本略有不同。静态常量只分配一次-而实例常量将为每个实例创建(并在每个实例的生命周期中继续分配),并且局部常量将为每个方法调用创建并在结束时进行清理呼叫。所有这些都是理论上的-编译器的实际实现可以优化事情。
在大多数情况下,是否使某个方法在整个类中都恒定不变还是局部于局部优先。但是,只有在非常有限的情况下才具有非静态最终常数,例如是否在构造函数中分配了该常数,并且因实例而异。
答案 1 :(得分:1)
对于您来说,在定义常量时,我认为最好在类级别上声明它。你的逻辑是合理的。
进一步的阅读可以帮助您:What is the best way to implement constants in Java?
或
答案 2 :(得分:1)
我将其用作局部变量,访问局部变量比访问字段快。