单独java文件中枚举的常量特定类主体
我目前正在扩展一个离散事件模拟,并且(来自Python)对Java的一些设计模式很难理解 快速概述我正在努力实现的目标: 我想在自己编写的模拟框架中测试不同的预处理过程。 每种预处理方式都包含多达几百行代码 我创建了一个枚举类,其中包含:单独java文件中枚举的常量特定类主体,java,enums,Java,Enums,我目前正在扩展一个离散事件模拟,并且(来自Python)对Java的一些设计模式很难理解 快速概述我正在努力实现的目标: 我想在自己编写的模拟框架中测试不同的预处理过程。 每种预处理方式都包含多达几百行代码 我创建了一个枚举类,其中包含: public enum PreProcessorType implements preprocessorUsable { NoPreprocessing { @Override someMethod() },
public enum PreProcessorType implements preprocessorUsable {
NoPreprocessing {
@Override
someMethod()
},
SomePreprocessing {
@Override
someMethod()
},
FullPreprocessing {
@Override
someMethod()
}
}
现在,每个预处理类型的所有这些多个方法都变得非常大,使得整个预处理类型类无法读取。是否可以将内容放在不同的java文件中?或者,这是否破坏了枚举的(“常量特定”)类主体的整个概念
我创建此预处理作为枚举的最初原因是,我可以在模拟框架中轻松地对其进行迭代,如下所示:
PreProcessorType[] preprocessortypes = {PreProcessorType.NoPreprocessing,
PreProcessorType.SomePreprocessing,
PreProcessorType.FullPreprocessing}
for (PreProccesorType p : preprocessortypes){
// do the preprocessing
p.someMethod();
// run the actual simulation
runSimulation();
}
另一种选择是:
对于每种预处理方法,编写一个单独的java文件,其中包含相应的类和所有必要的方法(实现所需的接口)
有没有一种方法可以确保这种“enum”方法的安全性,并简单地将每种类型的常量特定部分存储在一个单独的java文件中以便于可读
提前谢谢你
如果对此处的设计存在重大误解,请告知我。您将无法将枚举正文保存到不同的类文件中。对于每种预处理类型,可以使用单独的类文件完成相同的任务:
interface PreprocessorUsable {
default void someMethod() {}
}
class NoPreprocessing implements PreprocessorUsable {}
class SomePreprocessing implements PreprocessorUsable {}
class FullPreprocessing implements PreprocessorUsable {}
然后让PrefortOrtypeEnum只保存对实现的引用
public enum PreProcessorType {
NoPreprocessing(new NoPreprocessing()),
SomePreprocessing(new SomePreprocessing()),
FullPreprocessing(new FullPreprocessing());
final PreprocessorUsable preprocessor;
PreProcessorType(PreprocessorUsable preprocessor) {
this.preprocessor = preprocessor;
}
public PreprocessorUsable getPreprocessor() {
return preprocessor;
}
}
class PreProcessorTypes {
public static final PreprocessorUsable NO_PREPROCESSING = new NoPreprocessing();
public static final PreprocessorUsable SOME_PREPROCESSING = new SomePreprocessing();
public static final PreprocessorUsable FULL_PREPROCESSING = new FullPreprocessing();
}
您可以这样使用它:
PreProcessorType[] preprocessortypes = {PreProcessorType.NoPreprocessing,
PreProcessorType.SomePreprocessing,
PreProcessorType.FullPreprocessing};
for (PreProcessorType p : preprocessortypes){
// do the preprocessing
p.getPreprocessor().someMethod();
// run the actual simulation
runSimulation();
}
或者,使用一个只保存不同实现的静态常量的类
public enum PreProcessorType {
NoPreprocessing(new NoPreprocessing()),
SomePreprocessing(new SomePreprocessing()),
FullPreprocessing(new FullPreprocessing());
final PreprocessorUsable preprocessor;
PreProcessorType(PreprocessorUsable preprocessor) {
this.preprocessor = preprocessor;
}
public PreprocessorUsable getPreprocessor() {
return preprocessor;
}
}
class PreProcessorTypes {
public static final PreprocessorUsable NO_PREPROCESSING = new NoPreprocessing();
public static final PreprocessorUsable SOME_PREPROCESSING = new SomePreprocessing();
public static final PreprocessorUsable FULL_PREPROCESSING = new FullPreprocessing();
}
现在,您将使用实例而不是枚举:
PreprocessorUsable preprocessors = {PreProcessorTypes.NO_PREPROCESSING,
PreProcessorTypes.SOME_PREPROCESSING,
PreProcessorTypes.FULL_PREPROCESSING};
for (PreprocessorUsable p : preprocessors){
// do the preprocessing
p.someMethod();
// run the actual simulation
runSimulation();
}
非常感谢您的全面和及时的回复。非常感谢!