Java 创建子类的新实例
我有一个敌人的数组列表,每种敌人都会扩展敌人。现在我不想让每一种敌人都分享他们的所有数据,但我会根据我的敌人选择另一个阵法列表。因此,我认为方法是获取包含所有选项的数组列表的对象,然后将它们更改为同一类的新实例。我的问题是,我该怎么做?或者你们有更好的方法吗 为了便于理解,这里是我所说的抽象的意思Java 创建子类的新实例,java,class,inheritance,instance,children,Java,Class,Inheritance,Instance,Children,我有一个敌人的数组列表,每种敌人都会扩展敌人。现在我不想让每一种敌人都分享他们的所有数据,但我会根据我的敌人选择另一个阵法列表。因此,我认为方法是获取包含所有选项的数组列表的对象,然后将它们更改为同一类的新实例。我的问题是,我该怎么做?或者你们有更好的方法吗 为了便于理解,这里是我所说的抽象的意思 class shop{ ArrayList<Enemy> allEnemies; } class generator{ ArrayList<Enemies> sel
class shop{
ArrayList<Enemy> allEnemies;
}
class generator{
ArrayList<Enemies> selectedToGenerate = based on some of allEnemies
for(Enemy x : selectedToGenerate){ // i know this wouldn't work
x = newInstanceOf(x.getNonenemyThereforeChildclassClass());
}
}
class商店{
ArrayList allEnemies;
}
类生成器{
ArrayList selectedToGenerate=基于某些关联
对于(敌人x:selectedToGenerate){//我知道这不起作用
x=newInstanceOf(x.getNonenemyThereforeChildclassClass());
}
}
希望这能解释我的意思。谢谢你的时间 你可以在你的
敌人
中添加一个Builder
abstract class Enemy {
private int strength;
public Builder<Enemy> getBuilder();
public static class Builder<T extends Enemy> {
int str;
public Builder<T> copyValues(T enemy) {
str = enemey.strength;
return this;
}
public Builder<T> strength(int s) {
str = s;
return this;
}
protected void fillValues(T toFill) {
toFill.strength = str;
}
protected abstract T createInstance();
public T build() {
T result = createInstance();
fillValues(result);
return result;
}
}
}
现在,您可以使用敌人的构建器创建敌人的副本:
for(Enemy x : selectedToGenerate){ // i know this wouldn't work
Builder<? extends Enemy> builder = x.getBuilder();
builer.copyValues(x);
Enemy copy = builder.build();
}
那么
敌军
是基类,您在该列表中有EnemyA
,EnemyB
等子类?基本上,您需要列表的副本,但是对于新实例,这很重要:您是否计划向应用程序中添加新的敌人种类?你能举例说明你如何使用敌人吗。我在考虑两种模式:Factory
和Builder
。嘿,非常感谢!诚然,我还不是最好的Java程序员,尽管这很令人伤心。尽管如此,我还是非常期待了解构建器,但多亏了您的解决方案,我现在将添加一个地图作为快速修复。非常感谢您的帮助:)
for(Enemy x : selectedToGenerate){ // i know this wouldn't work
Builder<? extends Enemy> builder = x.getBuilder();
builer.copyValues(x);
Enemy copy = builder.build();
}
EnemyA.Builder base = new Builder().strength(10);
EnemyA withSpeed1 = base.speed(1).build();
EnemyA withSpeed2 = base.speed(2).build();
EnemyA withSpeed3 = base.speed(3).build();