gpt4 book ai didi

java - 调用枚举值对应的子类构造函数

转载 作者:行者123 更新时间:2023-11-30 08:27:02 25 4
gpt4 key购买 nike

我有一个创建新 EntityItem 的方法:

    public void processEntityItem(int[] a){
float x = Float.intBitsToFloat(a[4]);
float y = Float.intBitsToFloat(a[5]);
main.entitys.add(new EntityItem(EntityType.values()[a[2]], a[3], x, y, main.mr.getHieght(x, y), Float.intBitsToFloat(a[6]), a[7]));
}

我的每个 EntityItem 都分配了一个枚举 (EntityType) 值,构造函数中的第一个参数是该枚举值。我还有一些 EntityItem 的子类,我想从这个方法或从 EntityItem 的构造函数创建,这是这样的:

    public EntityItem(EntityType type, int ID, float xCoord, float yCoord, float zCoord, float rotation, int mapID) {
super(type, ID, xCoord, yCoord, zCoord, rotation, mapID);
}

EntityItem 构造函数子类的示例:

    public EntityArrow(int ID, float x, float y, float z, float rotation,  int mapID){
super(EntityType.ARROW, ID, x, y, z, rotation, mapID);
createModel();
}

我能想到的唯一方法是切换枚举类型的所有值并调用对应于每个值的构造函数。是否有不同的方法来检查是否存在与传递的枚举值对应的子类,如果是,则调用不需要我写出每个枚举值的子类构造函数?

最佳答案

如果构造函数参数始终相同,则枚举本身可以充当工厂而不是您的控制代码。例如:

public enum EntityType {

ARROW {
@Override
public EntityItem makeEntity(
int id,
float x,
float y,
float z,
float rotation,
int mapId
) {
// uses subclass
return new EntityArrow(id, x, y, z, rotation, mapId);
}
},
CIRCLE {
@Override
public EntityItem makeEntity(
int id,
float x,
float y,
float z,
float rotation,
int mapId
) {
// uses base class
return new EntityItem(this, id, x, y, z, rotation, mapId);
}
};

public abstract EntityItem makeEntity(
int id,
float x,
float y,
float z,
float rotation,
int mapId
);
}

关于java - 调用枚举值对应的子类构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21077993/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com