如何获取静态对象属性的类



我有一个父类Tile和继承的类Walltile、FloorTile、EntityTile。每个继承的类都具有与其名称相关的BufferedImage属性。

public class WallTile extends Tile {
public static BufferedImage WATER_TOP_LEFT = Game.tilesSpritesheet.getSprite(34, 0);
public static BufferedImage WATER_TOP = Game.tilesSpritesheet.getSprite(51, 0);
public static BufferedImage WATER_TOP_RIGHT = Game.tilesSpritesheet.getSprite(68, 0);
public static BufferedImage WATER_LEFT = Game.tilesSpritesheet.getSprite(34, 17);
public static BufferedImage WATER_CENTER = Game.tilesSpritesheet.getSprite(51, 17);
public static BufferedImage WATER_RIGHT = Game.tilesSpritesheet.getSprite(68, 17);
public static BufferedImage WATER_BOTTOM_LEFT = Game.tilesSpritesheet.getSprite(34, 34);
public static BufferedImage WATER_BOTTOM = Game.tilesSpritesheet.getSprite(51, 34);
public static BufferedImage WATER_BOTTOM_RIGHT = Game.tilesSpritesheet.getSprite(68, 34);
public static BufferedImage WATER_LITTLE_TOP_LEFT = Game.tilesSpritesheet.getSprite(17, 34);
public WallTile(BufferedImage sprite, int x, int y) {
super(sprite, x, y);
}
}
public class FloorTile extends Tile {
public static BufferedImage TILE_GRASS = Game.tilesSpritesheet.getSprite(85, 0);
public static BufferedImage TILE_SAND = Game.tilesSpritesheet.getSprite(136, 0);
public FloorTile(BufferedImage sprite, int x, int y) {
super(sprite, x, y);
}
}
public class EntityTile extends Tile {
public static BufferedImage TILE_TREE_1 = Game.tilesSpritesheet.getSprite(221, 153);
public static BufferedImage TILE_TALL_GRASS = Game.tilesSpritesheet.getSprite(374, 187);
public static List<BufferedImage> spriteList = new ArrayList<BufferedImage>();
// Construtor
public EntityTile(BufferedImage sprite, int x, int y) {
super(sprite, x, y);
}
@Override
public void render(Graphics g) {
g.drawImage(FloorTile.TILE_GRASS, x - Camera.x, y - Camera.y, null);
g.drawImage(sprite, x - Camera.x, y - Camera.y, null);
}
}

我实例化Tile,然后转换到特定的类,比如:

Tile tile = new Tile(sprite, 0, 0);
WallTile wt = (WallTile) tile;

但我需要知道这个Tile对象是WallTile、FloorTile还是EntityTile。为此,我有一个sprite属性,它对应于我想要的***平铺类。我怎样才能得到这些信息?当我使用sprite.getClass((时,它会返回BufferedImage,但我需要像WallTile、FloorTile或EntityTile一样返回。为此:

if (tile.sprite.getClass().toString() == "class World.WallTile")
//do something

您的这一行代码不会创建一个WallTile对象。

Tile tile = new Tile(sprite, 0, 0);

上面的行创建了一个Tile对象,因此不能强制转换为WallTile

我在你的问题中找不到类Tile的代码,但我想你应该把它做成一个抽象类,并给构造函数protected访问权限,以避免直接构造Tile对象。

考虑类Furniture及其子类Table。我可以创建Table,但不能创建Furniture,因为Furniture是一个通用术语。其目的是存储所有类型家具的常见属性。

类似地,Tile类是一个基类,它只存储WallTileFloorTileEntityTile共有的属性。

下面的代码行将创建一个WallTile作为Tile对象,因此可以进行强制转换。

Tile tile = new WallTile(sprite, 0, 0); // 'tile' is actually 'WallTile' instance
WallTile wallTile = (WallTile) tile;

Tilesprite属性是BufferedImage,而与它是其属性的对象类型无关。因此sprite始终BufferedImage。您可以做的是检查sprite的实际值,因为sprite的所有可能值都必须是您定义的常数之一。

因此,为了确定Tile对象是否实际上是WallTile,例如,您可以执行以下操作:

if (sprite == WallTile.WATER_TOP_LEFT ||
sprite == WallTile.WATER_TOP      ||
// etc) {
}

尽管如此,我还是想知道你为什么要这么做。你没有发布一个最小的、可复制的例子,所以上下文丢失了。我不知道你是如何获得Tile对象的,为什么你需要确定Tile的实际类型。尽管如此,你能不简单地做以下事情吗?

if (tile instanceof WallTile)

相关内容

  • 没有找到相关文章

最新更新