我有一个在一个方法中使用的变量。所以我的 linter 告诉我让它成为本地的。但是我喜欢它是一个类级变量,以防其他人修改代码并需要使用该变量。如果不是类级别,他们可能会在方法中错过它并创建一个新的重复变量?
我的逻辑合理还是只做一个局部变量?
代码如下:
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);
}
}
最佳答案
更改为:
private static final char DOT_CHAR = '●';
现在您已经以正确的方式创建了一个类常量,linter 将不再建议更改它。
基本上,linter 是在告诉您,仅在一个地方使用的私有(private)实例 变量是一种分配浪费,应该在使用它的地方是本地的。通过将其声明为静态的,您是在告诉编译器您为 class 的常量的一个副本,它略有不同。静态常量分配一次——而实例常量将为每个实例创建(并在每个实例的生命周期内继续分配),并且将为每个方法调用创建一个局部常量并在方法结束时清除称呼。所有这些都是理论上的 - 编译器的实际实现可能会优化一些事情。
在大多数情况下,是将常量设置为类范围内的还是方法本地的常量是一个偏好问题。但是拥有一个非静态的最终常量只在非常有限的情况下才有意义,比如它在构造函数中被赋值并且因实例而异。
关于java - 我应该让这个类级别的变量更本地化吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55347419/