繁体   English   中英

Java 常量对象和字段

[英]Java constant objects and fields

我想制作一个文件,名为 ObjectsInfos.java 它有太多对象的信息。 哪种方式最适合解决问题? 哪一种最有效? 单身? 遗产? ..?

谢谢你的帮助。

.. 编辑。 信息将在稍后添加。 所以我必须将信息写入一个新的 java 文件。

//ObjectsInfos.java
    public class ObjectsInfos{

         public class Object1Info{
              static final int attr1 = 1;
              static final int attr2 = 5;
         }

         public class Object2Info{
              static final int attr1 = 3;
              static final int attr2 = 6;
         }
    }
    ---------------------------
    //Another java class
        static void main(){
            myGenericMethod(ObjectsInfos.Object1Info.attr1, ObjectsInfos.Object1Info.attr2);
            myGenericMethod(ObjectsInfos.Object2Info.attr1, ObjectsInfos.Object2Info.attr2);
        }

在我看来,您正在寻找enum

public enum ObjectsInfos{
    Object1Info(1,5),
    Object2Info(3,6);
    private final int attr1;
    private final int attr2;

    ObjectsInfos(int attr1, int attr2) {
        this.attr1 = attr1;
        this.attr2 = attr2;
    }

    public int getAttr1() {
        return attr1;
    }

    public int getAttr2() {
        return attr2;
    }
}

您还可以在类中定义一组枚举。 例如,如果您考虑食物及其类别:

public class Food {

    private Food() {
    }

    enum Fruit {
        BANANA,
        ORANGE
    }

    enum Vegetable {
        CARROT,
        LETTUCE
    }

    enum Cereal {
        CORN,
        WHEAT
    }

    enum Meat {
        COW,
        PORK
    }

    enum Sauce {
        TOMATOE,
        MUSTARD
    }
}

枚举是简单Stringint常量的强大替代品。 它们为您提供了一些开箱即用的方法,例如valuesvalueOf ,它们非常方便,并且在其之上键入安全(仅使用ints无法获得)。

这是一个关于如何使用上述枚举的简单示例:

import java.util.Arrays;
import java.util.stream.Stream;

public class FoodMain {

    public static void main(String[] args) {
        System.out.println(isCereal("bla"));
        System.out.println(isCereal("wheat"));
        Stream.of(Food.Fruit.values()).forEach(System.out::println);
    }

    private static boolean isCereal(String cereal) {
        return Arrays.stream(Food.Cereal.values()).anyMatch(c -> c.toString().equalsIgnoreCase(cereal));
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM