java - 我应该让这个类级别的变量更本地化吗?

标签 java

我有一个在一个方法中使用的变量。所以我的 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/

相关文章:

java - 谷歌地图缩放级别

java - UNIX 下一个进程的最大套接字连接数

java - 如何在 Windows 7 上将 WebLogic 服务器 JDK 从 1.7 更新到 1.8?

java - 如果混合全局构建和配置文件构建,cxf-codegen-plugin 会生成错误代码

Java - Selenium Webdriver : Entering text into text field, 并自动从文本字段中删除

java - MySQL 还是 Derby ?在线java聊天服务器?

java - AES 加密/解密 Java => OpenSSL 命令行工具

java - 如何在jsp中通过方法 `get()`访问对象?

java - 无法使用内部文本解码元素数组

java - 使用 spring-integration 列出 ftp 中的文件