Java常量示例(创建只有常量的java文件)

时间:2012-09-20 17:45:11

标签: java constants

声明只具有常量的java文件的最佳做法是什么?

public interface DeclareConstants
{
    String constant = "Test";
}

OR

public abstract class DeclareConstants
{
    public static final String constant = "Test";
}

5 个答案:

答案 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);
        }
}

请参阅wiki链接:http://en.wikipedia.org/wiki/Constant_interface

答案 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来声明常量字段。