什么是更简洁,更优雅的方式来初始化所有这些?

时间:2014-09-22 02:51:38

标签: java variables

我一个一个地命名所有这些。有没有占用更少空间的方法?

public class Matt{
    PImage matt, 
    imgLS1, imgLS2, imgLS3, imgRS1, imgRS2, imgRS3,
    imgLSB1, imgLSB2, imgLSB3, imgRSB1, imgRSB2, imgRSB3,
    imgLW1, imgLW2, imgLW3, imgRW1, imgRW2, imgRW3,
    imgLWB1, imgLWB2, imgLWB3, imgRWB1, imgRWB2, imgRWB3;
    public Matt(){    
        imgLS1  = loadImage("./Images/Matt/MattLS1.png");
        imgLS2  = loadImage("./Images/Matt/MattLS2.png");
        imgLS3  = loadImage("./Images/Matt/MattLS3.png");
        imgRS1  = loadImage("./Images/Matt/MattRS1.png");
        imgRS2  = loadImage("./Images/Matt/MattRS2.png");
        imgRS3  = loadImage("./Images/Matt/MattRS3.png");
        imgLSB1 = loadImage("./Images/Matt/MattLSB1.png");
        imgLSB2 = loadImage("./Images/Matt/MattLSB2.png");
        imgLSB3 = loadImage("./Images/Matt/MattLSB3.png");
        imgRSB1 = loadImage("./Images/Matt/MattRSB1.png");
        imgRSB2 = loadImage("./Images/Matt/MattRSB2.png");
        imgRSB3 = loadImage("./Images/Matt/MattRSB3.png");
        imgLW1  = loadImage("./Images/Matt/MattLW1.png");
        imgLW2  = loadImage("./Images/Matt/MattLW2.png");
        imgLW3  = loadImage("./Images/Matt/MattLW3.png");
        imgRW1  = loadImage("./Images/Matt/MattRW1.png");
        imgRW2  = loadImage("./Images/Matt/MattRW2.png");
        imgRW3  = loadImage("./Images/Matt/MattRW3.png");
        imgLWB1 = loadImage("./Images/Matt/MattLWB1.png");
        imgLWB2 = loadImage("./Images/Matt/MattLWB2.png");
        imgLWB3 = loadImage("./Images/Matt/MattLWB3.png");
        imgRWB1 = loadImage("./Images/Matt/MattRWB1.png");
        imgRWB2 = loadImage("./Images/Matt/MattRWB2.png");
        imgRWB3 = loadImage("./Images/Matt/MattRWB3.png");
    }
}

2 个答案:

答案 0 :(得分:3)

将图片放入Map<String,PImage>,按图片后缀组织地图。就访问图像而言,这种方法可能比直接使用变量稍微方便/有效,但它会为您节省大量空间:

static final String[] suffixes = new String[] {"LS1", "LS2", "LS3", ..., "RWB3"};
Map<String,PImage> images = new HashMap<String,PImage>();
public Matt() {
    for (String suffix : suffixes) {
        PImage image = loadImage("./Images/Matt/Matt"+suffix+".png");
        images.put(suffix, image);
    }
}

答案 1 :(得分:1)

由于&#34; LS&#34;等似乎具有语义含义,我建议使用enum solution by @dasblinkenlight的变体:

final int N_FILES = 3; // files/position -- could also be a variable
enum Position {
    LS, RS, LSB, RSB, LW, RW, LWB, LRB
}

Map<Position, String[]> files = new EnumMap<>(Position.class);
for (Position pos : Position.values()) {
    String[] posFiles = new String[N_FILES];
    files.put(pos, posFiles);
    for (int i = 1; i <= N_FILES; ++i) {
        posFiles[i-1] = "./Images/Matt/Matt" + pos.name() + i + ".png";
    }
}

然后您可以使用以下代码访问任何元素:

Position p = RS; // or any other value
int index = 0; // 0..(N_FILES-1), corresponding to suffixes 1..N_FILES
String fileName = files.get(p)[i];