Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果枚举中的类型只使用一次,我应该创建枚举还是类_Java_Performance_Class_Enums_Enumeration - Fatal编程技术网

Java 如果枚举中的类型只使用一次,我应该创建枚举还是类

Java 如果枚举中的类型只使用一次,我应该创建枚举还是类,java,performance,class,enums,enumeration,Java,Performance,Class,Enums,Enumeration,在Java中,想知道哪种解决方案是最佳的编码实践和性能 因此,如果我创建了以下枚举,但对于每种类型的枚举,它将只用于一次 public enum DifferType{ TypeA("TypeA", True, "Monthly", False), TypeB("TypeB", False, "Daily",True), TypeC("TypeC", True, "Yearly",False), TypeD("TypeD", False, "Monthly",Tr

在Java中,想知道哪种解决方案是最佳的编码实践和性能

因此,如果我创建了以下枚举,但对于每种类型的枚举,它将只用于一次

public enum DifferType{
    TypeA("TypeA", True, "Monthly", False),
    TypeB("TypeB", False, "Daily",True),
    TypeC("TypeC", True, "Yearly",False),
    TypeD("TypeD", False, "Monthly",True)
    TypeE("TypeE", True, "Yearly",False),
    TypeF("TypeF", False, "Monthly",True),
    TypeG("TypeG", True, "Yearly",False),
    TypeH("TypeH", False, "Monthly",True)
    }
或者一个子类,可以创建一个新对象,并在使用时设置字段

   public class DifferType{

    public DifferType(String name, Boolean isDown, String frequency, String isLeft){
    this.name = name;
    this.isDown = down;
    this.frequency = frequency;
    this.isLeft = isLeft;
    }

}
DifferType TypeA = new DifferType("TypeA", True, "Monthly", False);
 DifferType TypeB = new DifferType("TypeB", False, "Daily",True)
.....etc

它们有不同的用途。
enum
用于(通常)枚举(因此得名)某些
对象的所有可能或有意义的值。所以如果
TypeA
TypeH
覆盖所有可能的值,一个
enum
是最好的。如果您只是提供一些示例或常用示例,那么类可能是最好的选择*

这里不应该考虑使用的数量(至少在我看来)。API会随着时间的推移而不断发展和变化,您可能会发现以前只使用过一次的东西现在到处都在使用


*有时使用
枚举
接口
组合也适用于此类情况。例如:

interface ThingDoer {
    void doThing();
}

enum CommonThingDoers implements ThingDoer {
    _1() {
        @Override
        public void doThing() {}
    },
    _2() {
        @Override
        public void doThing() {}    
    } // etc...
}

它允许扩展,但也表示“这些是我当前希望看到的所有值。

这与您的问题无关,但在需要将实例存储在集合中之前,请避免使用诸如
Boolean
之类的装箱类型。诸如
Boolean
之类的原语可确保空安全行为;不要白白扔掉它。