Java 如何获取静态对象属性的类
我有一个父类Tile和继承的类Walltile、FloorTile、EntityTile。每个继承的类都有与其名称相关的BuffereImage属性Java 如何获取静态对象属性的类,java,object,abstract,Java,Object,Abstract,我有一个父类Tile和继承的类Walltile、FloorTile、EntityTile。每个继承的类都有与其名称相关的BuffereImage属性 public class WallTile extends Tile { public static BufferedImage WATER_TOP_LEFT = Game.tilesSpritesheet.getSprite(34, 0); public static BufferedImage WATER_TOP = Game.tilesSp
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);
}
}
但我需要知道这个瓷砖对象是WallTile、FloorTile还是EntityTile。为此,我有一个sprite属性,它对应于我想要的****Tile类。我怎样才能得到这个信息?当我使用sprite.getClass()时,它返回BuffereImage,但我需要像WallTile、FloorTile或EntityTile这样的返回。
为此:
if (tile.sprite.getClass().toString() == "class World.WallTile")
//do something
这行代码不会创建一个
WallTile
对象
Tile Tile=新的Tile(sprite,0,0);
上面的行创建了一个平铺
对象,因此无法将其转换为墙平铺
在您的问题中,我找不到类Tile
的代码,但我想您应该将其作为一个抽象类,并给构造函数protected
访问权限,以避免直接构造Tile
对象
考虑类Furniture
及其子类Table
。我可以创建表
,但不能创建家具
,因为家具
是一个通用术语。其目的是存储所有类型家具的公共属性
类似地,您的Tile
类是一个基类,它只存储WallTile
、FloorTile
和EntityTile
所共有的属性
下面的代码行将创建一个WallTile
作为Tile
对象,因此可以进行强制转换
Tile Tile=新墙砖(精灵,0,0);//“瓷砖”实际上是“墙砖”实例
墙砖墙砖=(墙砖)瓷砖;
classTile
的sprite
属性是一个buffereImage
,而不管它是什么类型的对象属性。因此,sprite
的类将始终为BufferedImage
。您可以做的是检查sprite
实际上是什么,因为sprite
的所有可能值必须是您定义的常量之一
因此,为了确定平铺
对象是否实际上是墙平铺
,例如,您可以执行以下操作:
if(sprite==WallTile.WATER\u左上方||
雪碧==墙砖、水和顶部||
//等){
}
不过,我想知道你为什么要这么做。您没有发布内容,因此缺少上下文。我不知道如何获得平铺
对象,以及为什么需要确定平铺
的实际类型。然而,你能不能不简单地做到以下几点
if(墙砖实例)
if (tile.sprite.getClass().toString() == "class World.WallTile")
//do something