课程

时间:2015-11-23 09:02:16

标签: java class static static-members

我有一个有数百个静态字段的类,int字段代表颜色。

public class LColorPallette {
      public static final int RED_050 = 0xfde0dc;
      ...
}

我希望将它们放在可以是arraylist,map或set的容器​​中。我知道可以声明一个静态命名空间,以便有类似的东西

public class ColorPalletteSingleton {
      static {
            container.add(...);
            ...
}

我需要一个例子来说明如何做或其他任何方式来解决我的问题?

由于

4 个答案:

答案 0 :(得分:3)

static {}不是“静态命名空间”,它是一个静态初始化块,用于初始化静态变量。

您可以将颜色存储为静态Collection

例如:

public static List<Integer> colors = new ArrayList<>;

static {
    colors.add (RED_050);
    ...
}

答案 1 :(得分:2)

而不是静态字段更喜欢枚举。

What's the advantage of a Java enum versus a class with public static final fields?

 enum LColorPallette {
    RED_050(0xfde0dc);
    private int hexValue;

    private LColorPallette(int hexValue) {
        this.hexValue = hexValue;
    }

    public String getHexValue()
    {
        return Integer.toHexString(hexValue);
    }

}

Enum有值方法,它将返回array.No需要循环并添加到arrayList

 List<LColorPallette> somethingList = Arrays.asList(LColorPallette .values());

UPDATE :由于VBR推荐使用Prefer EnumSet而不是List

EnumSet set = EnumSet.allOf(LColorPallette .class);

答案 2 :(得分:2)

您可以尝试使用reflection获取所有字段。

    List<Integer> result = new ArrayList<Integer>();
    Field[] fields = LColorPallette.class.getDeclaredFields();
    for(Field classField : fields){
        result.add(classField.getInt(classField.getName()));    
    }
    System.out.println(result);

答案 3 :(得分:1)

作为Map

public static final int RED_050 = 0xfde0dc;
public static final int RED_051 = 0xfde0df;

public void test() throws IllegalArgumentException, IllegalAccessException {
    Map<String, Integer> colours = new HashMap<>();
    Class<Test> myClass = (Class<Test>) this.getClass();
    Field[] fields = myClass.getDeclaredFields();
    for (Field field : fields) {
        Type type = field.getGenericType();
        // TODO: Make sure it is an int
        int value = field.getInt(field);
        System.out.println("Field " + field.getName() + " type:" + type + " value:" + Integer.toHexString(value));
        colours.put(field.getName(), value);
    }
}