我已经有以下课程了:
public enum Tile {
PT_Blue_1(1, 1, "Blue 1", "blue_1.jpg"),...;
//Constructor, getter and setter
一个factoryClass,包含所有tile的以下hashmap:
public static HashMap<String, EnumSet<Tile>> getAllTiles() {
HashMap<String, EnumSet<Tile>> htAllTiles = new HashMap<>();
htAllTiles.put("Tiles", EnumSet.allOf(Tile.class));
return htAllTiles;
}
我回来了{Tiles=[Blue 1]}
。
现在我想将它转换为数组接口以获取图像名以将图像添加到游戏板:
public ITile[] getTilesToBoard() {
ITile[] returnPath = Arrays.copyOf(this.hmTiles.values().toArray(), this.hmTiles.values().size(), ITile[].class);
return returnPath;
}
现在我得到java.lang.ArrayStoreException
,我不知道为什么。谁能看出故障在哪里?
最后我想用它将它放入网格窗格中:
ImageView[][] iV = new ImageView[COL][ROW];
for (ITile tiles : model.gameBoard.getTilesToBoard()) {
for(int i=0; i<COL; i++){
for(int j=0; j<ROW;j++){
iV[i][j] = new ImageView(ImageLoader.getImage(tiles.getTile().getPath()));
gridPane.add(iV[i][j], i, j);
}
}
感谢您的任何建议!
答案 0 :(得分:0)
看起来您的值为EnumSet
:
htAllTiles.put("Tiles", EnumSet.allOf(Tile.class));
您正尝试将数组EnumSet
分配给ITiles
数组。
ITile[] returnPath = Arrays.copyOf(this.hmTiles.values().toArray(), this.hmTiles.values().size(), ITile[].class);
此处hmTiles.values()
为您提供集合EnumSets,而不是您的枚举值的集合。
在将值添加到数组之前,您必须对EnumSet进行交互。尝试这样的事情:
public ITile[] getTilesToBoard() {
ArrayList<ITiles> returnPath = new ArrayList<>();
for (EnumSet<Tile> tiles : this.hmTiles.values()) {
for (Tile tile : tiles) {
returnPath.add(tile);
}
}
return returnPath.toArray(new ITiles[returnPath.size()]);
}
PS:另外,请注意collection.toArray()返回一个Object [],以获取您需要使用的特定类型的数组collection.toArray(T[] a)
答案 1 :(得分:0)
问题似乎是Tile
没有实现ITile
。这是一个简化的代码片段:
interface ITile {}
public enum Tile implements ITile {
one, two, three;
}
public static void main(String[] args) {
EnumSet tiles = EnumSet.allOf(Tile.class);
ITile[] iTiles = Arrays.copyOf(tiles.toArray(), 2, ITile[].class);
System.out.println(iTiles[0]);
}