簡體   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