Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何获取静态对象属性的类_Java_Object_Abstract - Fatal编程技术网

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

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

我有一个父类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.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);//“瓷砖”实际上是“墙砖”实例
墙砖墙砖=(墙砖)瓷砖;
class
Tile
sprite
属性是一个
buffereImage
,而不管它是什么类型的对象属性。因此,
sprite
的类将始终
BufferedImage
。您可以做的是检查
sprite
实际上是什么,因为
sprite
的所有可能值必须是您定义的常量之一

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

if(sprite==WallTile.WATER\u左上方||
雪碧==墙砖、水和顶部||
//等){
}
不过,我想知道你为什么要这么做。您没有发布内容,因此缺少上下文。我不知道如何获得
平铺
对象,以及为什么需要确定
平铺
的实际类型。然而,你能不能不简单地做到以下几点

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