声明只具有常量的java文件的最佳做法是什么?
public interface DeclareConstants
{
String constant = "Test";
}
OR
public abstract class DeclareConstants
{
public static final String constant = "Test";
}
答案 0 :(得分:69)
都不是。使用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);
}
}
答案 1 :(得分:2)
- 使用Class
字段创建public static final
。
- 然后您可以使用Class_Name.Field_Name
从任何类访问这些字段。
- 您可以将class
声明为final
,以便class
无法扩展(继承)并修改.. .. 强>
答案 2 :(得分:1)
两者都有效但我通常选择接口。如果没有实现,则不需要类(抽象或不抽象)。
作为建议,请尝试明智地选择常量的位置,它们是您的外部合同的一部分。不要将每个常量放在一个文件中。
例如,如果一组常量仅用于一个类或一个方法,则将它们放在该类,扩展类或实现的接口中。如果你不小心,你最终可能会陷入很大的依赖。
有时枚举是常量(Java 5)的一个很好的替代方法,请看: http://docs.oracle.com/javase/1.5.0/docs/guide/language/enums.html
答案 3 :(得分:1)
您还可以使用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"));
}
答案 4 :(得分:-1)
这个问题很老了。但我想提一下其他方法。 使用Enums声明常量值。 根据Nandkumar Tekale的答案,Enum可以使用如下:
<强>枚举:强>
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书中建议使用Enums来声明常量字段。