声明只有常量的 java 文件的最佳做法是什么?
public interface DeclareConstants
{
String constant = "Test";
}
或者
public abstract class DeclareConstants
{
public static final String constant = "Test";
}
没有一个。在必要时使用将final class for Constants
它们声明为和静态导入所有常量。public static final
public final class Constants {
private Constants() {
// restrict instantiation
}
public static final double PI = 3.14159;
public static final double PLANCK_CONSTANT = 6.62606896e-34;
}
用法 :
import static Constants.PLANCK_CONSTANT;
import static Constants.PI;//import static Constants.*;
public class Calculations {
public double getReducedPlanckConstant() {
return PLANCK_CONSTANT / (2 * PI);
}
}
-创建Class
一个public static final
字段。
-然后您可以使用Class_Name.Field_Name
.
-您可以将 声明class
为final
,以便class
不能扩展(继承)和修改....
两者都有效,但我通常选择接口。如果没有实现,则不需要类(抽象与否)。
作为建议,请尝试明智地选择常量的位置,它们是您的外部合同的一部分。不要将每个常量都放在一个文件中。
例如,如果一组常量仅在一个类或一个方法中使用,则将它们放在该类、扩展类或实现的接口中。如果您不小心,最终可能会导致严重的依赖混乱。
有时枚举是常量(Java 5)的一个很好的替代品,看看: http ://docs.oracle.com/javase/1.5.0/docs/guide/language/enums.html
这个问题很老了。但我想提一下另一种方法。使用枚举来声明常量值。根据 Nandkumar Tekale 的回答,枚举可以按如下方式使用:
枚举:
public enum Planck {
REDUCED();
public static final double PLANCK_CONSTANT = 6.62606896e-34;
public static final double PI = 3.14159;
public final double REDUCED_PLANCK_CONSTANT;
Planck() {
this.REDUCED_PLANCK_CONSTANT = PLANCK_CONSTANT / (2 * PI);
}
public double getValue() {
return REDUCED_PLANCK_CONSTANT;
}
}
客户端类:
public class PlanckClient {
public static void main(String[] args) {
System.out.println(getReducedPlanckConstant());
// or using Enum itself as below:
System.out.println(Planck.REDUCED.getValue());
}
public static double getReducedPlanckConstant() {
return Planck.PLANCK_CONSTANT / (2 * Planck.PI);
}
}
参考: Joshua Bloch 在他的 Effective Java book 中建议使用枚举来声明常量字段。
您还可以使用 Properties 类
这是名为的常量文件
# this will hold all of the constants
frameWidth = 1600
frameHeight = 900
这是使用常量的代码
public class SimpleGuiAnimation {
int frameWidth;
int frameHeight;
public SimpleGuiAnimation() {
Properties properties = new Properties();
try {
File file = new File("src/main/resources/dataDirectory/gui_constants.properties");
FileInputStream fileInputStream = new FileInputStream(file);
properties.load(fileInputStream);
}
catch (FileNotFoundException fileNotFoundException) {
System.out.println("Could not find the properties file" + fileNotFoundException);
}
catch (Exception exception) {
System.out.println("Could not load properties file" + exception.toString());
}
this.frameWidth = Integer.parseInt(properties.getProperty("frameWidth"));
this.frameHeight = Integer.parseInt(properties.getProperty("frameHeight"));
}