在java中,在多个公共类之间实现全局常量的最佳方法是什么? 我刚刚开始学习C++后的java,我想知道有没有一种方法可以让C中的全局常量与C一样,你可以有一个头文件,其中有一个常量列表,你可以只在需要使用它们的任何类文件中包含。现在,在我的Java项目中,我通过使用一个Java接口来实现这个效果,该接口将常量定义为最终变量 public interface Constants { public int constant1 = 36; public String projectName = "Project Name"; public float ratio = 4.716f; // ... more parameters }

在java中,在多个公共类之间实现全局常量的最佳方法是什么? 我刚刚开始学习C++后的java,我想知道有没有一种方法可以让C中的全局常量与C一样,你可以有一个头文件,其中有一个常量列表,你可以只在需要使用它们的任何类文件中包含。现在,在我的Java项目中,我通过使用一个Java接口来实现这个效果,该接口将常量定义为最终变量 public interface Constants { public int constant1 = 36; public String projectName = "Project Name"; public float ratio = 4.716f; // ... more parameters },java,constants,Java,Constants,要在使用它们的类文件中访问它们,我只需在类文件中使用implements关键字 public class Class1 implements Constants { // Members // ... // Methods // ... } 这并不是说这不起作用,我只是想知道这是否是获得这种效果的最佳方式。我并没有接受过Java方面的正式培训,我只是从我得到的一些书籍和在线论坛中自学。我环顾四周,并没有发现关于这个特定主题的太多讨论,更多的是关于在类中声明常量的

要在使用它们的类文件中访问它们,我只需在类文件中使用implements关键字

public class Class1 implements Constants {
    // Members
    // ...
    // Methods
    // ...
}

这并不是说这不起作用,我只是想知道这是否是获得这种效果的最佳方式。我并没有接受过Java方面的正式培训,我只是从我得到的一些书籍和在线论坛中自学。我环顾四周,并没有发现关于这个特定主题的太多讨论,更多的是关于在类中声明常量的讨论,所以我只是想从一些受过正规培训的更有经验的Java程序员那里了解,是否有更标准/传统的方法来实现这一点。任何建议都会有帮助,谢谢

创建单独的类,如下所示

public final class Constants{
    public static final int CONSTANT_1 = 36;
    public static final String PROJECT_NAME = "Project Name";
}
在代码中使用如下所示

 Constants.CONSTANT_1;

通常将常量作为类字段放置在与主题相关的类中。下面是Java的
Math
类和Android的
View

public final class Math {
    public static final double PI = 3.14159265358979323846;

public class View
    public static final int VISIBLE = 0x00000000;
    public static final int INVISIBLE = 0x00000004;
然后,它们可以用在任何其他以类名为前缀的类中,或者静态导入

double radius = 2 * r * Math.PI;

import static android.view.View.VISIBLE;
view.setVisibility(VISIBLE);

接口常数是一种反模式,应避免使用。我不是一个非常有经验的Java开发人员,但到目前为止还没有见过专门用来保存常量的类(除了处理像Android的
R
类这样的资源包时)



除此之外,Java还提供了枚举等功能。Joshua Bloch是众多Java平台特性的设计者和实现者,他在书中提出了第34项使用枚举而不是int常量。因此,无法在此主题中添加新内容。

使用
public static final int constant1=36
然后您可以在其他类中使用
常量.constant1
。编辑:除非您只希望从
常量
扩展的类可以访问它,在这种情况下,请使用
受保护的静态最终int constant1=36另见。谢谢,这是我要找的。显然,实现此效果的更好方法是使用最终的常量类并将其导入需要访问常量的所需类文件。
Enum
的存在是有原因的。接口常量充其量是一种反模式。可能重复的构造函数也需要将构造函数设置为私有。最好创建最终类枚举,但在这种情况下不可用,因为每个常量都有不同的类型。仍然可以使用枚举实现多个公共类之间使用的全局常量。我假设问题中的常量列表不完整。是和否。它们当然可以使用,但Enum建议这些值密切相关(例如Enum颜色-所有值都是颜色,而不仅仅是整数或RGB三元组),并且它们属于同一类型。因此,在这个问题中,您必须创建尽可能多的枚举,因为从设计的角度来看,这个解决方案是“干净”的。您可以(但不应该)创建值为ProjectName、VersionNumberString、AuthorName等的enum StringConstants。同意并将更新我的答案,以防有人对此感兴趣。或者至少问题将从搁置状态中释放。