我见过这样的例子:
public class MaxSeconds {
public static final int MAX_SECONDS = 25;
}
Run Code Online (Sandbox Code Playgroud)
并且假设我可以有一个Constants类来包装常量,声明它们是静态final.我几乎不知道Java,我想知道这是否是创建常量的最佳方法.
我正在寻找一些开源Java项目来进入Java,并注意到它们中有很多都有某种"常量"接口.
例如,processing.org有一个名为PConstants.java的接口,大多数其他核心类实现了这个接口.界面充满了静态成员.有这种方法的理由,还是这被认为是不好的做法?为什么不在有意义的地方使用枚举,或者使用静态类?
我发现使用接口允许某种伪"全局变量"很奇怪.
public interface PConstants {
// LOTS OF static fields...
static public final int SHINE = 31;
// emissive (by default kept black)
static public final int ER = 32;
static public final int EG = 33;
static public final int EB = 34;
// has this vertex been lit yet
static public final int BEEN_LIT = 35;
static public final int VERTEX_FIELD_COUNT = 36;
// renderers known to processing.core
static final …Run Code Online (Sandbox Code Playgroud) 我们有一个基于旧的jdk 1.4的庞大项目.我们已将Web应用程序迁移到JDK 1.6,但代码中仍然存在大量低效的实践和糟糕的设计.
关于主要的痛点点巨大的java类在单个java文件中有2500多行代码.这么多文件都是这样的.
试图通过删除常量并将常量放在不同的Constants.java文件中来重构我开始的类.但由于整个应用程序中有很多常量,因此常量文件存在增长到巨大比例的风险.
我希望得到关于开发人员采用什么策略来保持代码清洁和可维护性的反馈.
我一直在阅读本网站上有关常量用法的大量帖子.
问题:我应该何时使用枚举作为常量,使用类或接口.
我看到了我想要解决的两个关键情况.
例:
例:
从我所读到的一切来看,这就是我认为我掌握的内容以及我正在寻找的意见.
对于情况1:设计方法:使用最终类和静态导入.
在这里看到:接口常量的用途是什么?
对于情况2:设计方法:应用Enums来表示这些常量作为对象.
要记住的其他要点:
提前感谢您的想法和意见.
我知道存储全局常量的最佳实践是什么,这些常量可以在编译时随环境(debug,preprod,prod,release等)而改变.
在iOS中,我曾经将所有全局常量保留在头文件中并使用预处理器宏进行更改,请参阅以下答案:
在iOS应用程序中存储全局常量的位置?
我应该为Android使用什么解决方案?
在Java内部什么是更好的,或者什么是最优的,或者什么是标准:用常量或使用点表示法实现一个类?
例:
选项1:
import com.myproject.Constantes;
public class myClass {
myClass() {
System.out.println("Math: " + Constantes.PI);
}
}
Run Code Online (Sandbox Code Playgroud)
选项2:
import com.myproject.Constantes;
public class myClass implements Constantes {
myClass() {
System.out.println("Math: " + PI);
}
}
Run Code Online (Sandbox Code Playgroud)
哪个更好?为什么?MVJ使用,资源,速度?
我有两个问题
即使抽象类可以完成接口的功能,为什么我们在java中需要接口?
在搜索中,我发现抽象类无法完成接口功能的地方,即一个类需要实现多个接口。
这是在java中提出接口概念的唯一原因吗?
接口中的静态最终变量有什么用?欢迎需要说明接口中变量用法的示例程序。
提前致谢。
我注意到一些项目喜欢将常量存储在他们自己的文件中,即全局和主程序循环中使用的常量可能会混乱主文件,所以他们可能会将它们放在别处,然后引用/导入文件/类.
我知道在编写一个OOP类时,你想要将所有常量保存在类文件的头部,以便可以静态引用它们:
myCar.setColour(Colour.RED);
Run Code Online (Sandbox Code Playgroud)
班级中RED的颜色常数在哪里Colour.
什么是好于具有大量的常量的做法,他们应该只是你的主要文件的顶部或以任何方式明智的,有可能是ProgramConstants类,它是纯静态的,公共和可供阅读?
在Java中定义常量的位置的问题在论坛中出现了很多次,但我很难找到一个我觉得舒服的解决方案.
为简单起见,假设我有两个类:WriteMyData和ReadMyData.None是另一个的子类.两个类共享两个对其操作至关重要的常量:String DELIMITER和int LENGTH.将来我可能想要更改这些常量的值,以便在适当的地方定义它们.
这种共识似乎常常有利于这种enum类型.但是,在我的情况下没有什么可以枚举,所以我最终只有一个项目enum,我打电话DEFAULT:
public enum DataSettings {
DEFAULT(",", 32);
private final String delimiter;
private final int length;
DataSettings(String delmiter, int length) {
this.delimiter = delimiter;
this.length = length;
}
public String getDelimiter() { return delimiter; }
public int getLength() { return length; }
}
Run Code Online (Sandbox Code Playgroud)
因此,在我的两个类中,我通过DataSettings.DEFAULT.getDelimiter()和访问常量DataSettings.DEFAULT.getLength().
这是非常好的OO风格吗?是否使用enum过度杀伤?如果我不使用enum,我该怎么做?为常量创建一个接口似乎不受欢迎,而且我的类似乎没有自然的超类来源.初学者错误是只有一个默认项目enum吗?
我知道将常量放在界面中通常被认为是不好的做法,但......
我正在使用Observer模式将事件从对象广播到侦听器.
interface DownloadListener
{
public void sendEvent(int eventId);
}
Run Code Online (Sandbox Code Playgroud)
广播公司使用常量int来告诉听众哪个事件发生了.
class DownloadTask
{
public static final int EVENT_DOWNLOAD_STARTED = 1;
public static final int EVENT_DOWNLOAD_COMPLETED = 2; //should these go here?
DownloadTask(DownloadListener listener)
{
listener.sendEvent(EVENT_DOWNLOAD_STARTED);
}
}
Run Code Online (Sandbox Code Playgroud)
将常量放在界面中会更好吗?我的想法是接口是广播公司和听众之间的契约,因此它应该包含该合同的细节(常量).
我正在开发移动设备(Java 1.3),所以很遗憾不能使用枚举类型.