常量实用程序类中的最终关键字

Gna*_*anz 4 java performance final class constants

在使用具有常量实用程序类的final关键字时,我们可以获得性能和/或任何其他好处的任何差异.[此类仅包含静态最终字段和私有构造函数以避免对象创建]

public class ActionConstants {
    private ActionConstants()  // Prevents instantiation
    {   }

    public static final String VALIDFIRSTLASTNAME = "[A-Za-z0-9.\\s]+";    
    public static final String VALIDPHONENUMBER = "\\d{10}";
    ...
    ...
}
Run Code Online (Sandbox Code Playgroud)

只有差异才是最终的阶级

 public final class ActionConstants {
    private ActionConstants()  // Prevents instantiation
    {   }

    public static final String VALIDFIRSTLASTNAME = "[A-Za-z0-9.\\s]+";    
    public static final String VALIDPHONENUMBER = "\\d{10}";
    ...
    ...
}
Run Code Online (Sandbox Code Playgroud)

我想知道,使用final有什么好处,以及为常量定义类的正确方法是什么.

Jér*_*nge 5

没有任何好处.它不会改变有关您的static final属性的任何内容.

当一个类成为最终类时,编译器可以利用它来实现可覆盖的方法(静态方法不能被覆盖,充其量,它们将这些方法隐藏在继承的类中).

由于该类是final,因此编译器知道它的方法都不能被覆盖.因此,它可以计算不需要生成多态代码的情况(即,代码在运行时根据对象实例找到覆盖方法的正确'版本').因此,可以进行优化.

如果你想让一个类真正独特,你可以使用这样的东西:

public enum ActionConstants {

    INSTANCE;

    public static final int cte1 = 33;
    public static final int cte2 = 34;

}
Run Code Online (Sandbox Code Playgroud)

如果你根本不对类实例感兴趣,只需将所有常量放在一个接口中.

  • 通常"接口应仅用于定义类型.它们不应用于导出常量." (2认同)