从枚举中获取信息

时间:2013-07-29 12:55:19

标签: java image enums

所以我让Enum称为Terrain

public enum Terrain {
    DIRT(4, "res/imgs/DirtTile.png"), GRASS(5, "res/imgs/GrassTile.png");

    private String filePath;
    private Image image;
    private boolean imageLoaded;
    private int value;

    Terrain(int val, String imagePath) {
        value = val;
        filePath = imagePath;
        imageLoaded = false;
    }

    public Image getImage() {
        if (!imageLoaded) {
            loadImage();
        }
        return image;

    }

    public void loadImage() {
        try {
            image = ImageIO.read(new File(filePath));
        } catch (IOException e) {
            System.err.println("Failed to load image!");
            e.printStackTrace();
        }
        imageLoaded = true;
    }
}

我想要的是能够将int与地形值进行比较,这样如果它相等,那么该地形将被绘制到屏幕上。

我在想像

这样的东西
if(int==Terrain.value){} 

但我真的不确定如何解决这个问题。如果有人可以帮我解决这个问题,我有一个int数组,我想比较它,如果它与值相等,我将该tile存储在一个单独的图像数组中。

修改

对于那些说我应该放置一个getValue()方法的人,我想将我的值与所有Enums的东西进行比较,如果它相等(例如4,那么我可以设置我的图像(到污垢) 。

我在另一个班级检查这个。

6 个答案:

答案 0 :(得分:1)

你已经拥有了getImage的方法。只需为getValue

添加类似的方法
public int getValue() {
    return value;
}

然后你可以做

if (2 == Terrain.DIRT.getValue())
    //doSomething()

答案 1 :(得分:1)

一种可能性是将地形枚举中的静态函数添加为:

static Terrain getTerrainFor(int val)
{
   for (Terrain t : Terrain.values())
   {
      if (t.value() == val)
         return t;
   }

   return t;
}

调用它(Terrain.getTerrainFor(int))做逻辑

答案 2 :(得分:1)

在枚举中添加getValue()方法:

public int getValue() {
    return value;
}

只要您拥有Terrain枚举的实例,请调用getValue()方法并根据需要进行比较:

Terrain t = Terrain.DIRT;
if (t.getValue() == 4) {
    System.our.println("The terrain value is 4!");
}

答案 3 :(得分:1)

    enum Terrain{


    private int value;
    private static final Map<Integer, Terrain> terrainMap;

    static{
        terrainMap = new HashMap<Integer, Terrain>();
        for(Terrain type: values()){
            terrainMap.put(type.value, type);
        }
    }

    public static Terrain getTerrain(int value){
         return terrainMap.get(value);
    }

    }

使用此枚举的代码:

Terrain terrain = Terrain.getTerrain(4);

switch(terrain){
   case DIRT:
   //draw dirt
}

答案 4 :(得分:0)

在大多数情况下,最好的方法是摆脱整数并使用枚举类型。

  Terrain terrain = somevalue;
  if( terrain == Terrain.DIRT ) {
    // do something
  }

答案 5 :(得分:0)

如果你想从Terrain获得int,你可以使用内置valueOf(String)的java(这对你的问题来说是最简单的解决方案)。

int i = 2;
Terrain t = Terrain.valueOf("" + i);

当然你必须将int转换为字符串(我使用了一个空字符串连接。

编辑:对你的问题最好的解决方案是使用一个静态数组,它在索引处包含Terrain,使用一个静态方法,从那里得到它。