我想在 Pane 中添加两个敌人,Dragon
和Orc
。这两个类都扩展了一个名为 Entity
的父类(super class)。 ,我想为这两种方法创建一个方法。我尝试过使用 List<? extends Sprite> list
和List<? super Sprite> list
,但它不起作用,因为我需要将对象添加到列表中并稍后在调用 add 方法时读取它。
public void addDragon(List<Dragon> list) {
double imageWidth = 0;
for(int i = 0; i < 6; i++) {
Dragon dragon = new Dragon();
imageWidth = dragon.getWidth();
pane.getChildren().add(dragon);
list.add(dragon);
}
}
public void addDragon(List<Orc> list) {
double imageWidth = 0;
for(int i = 0; i < 6; i++) {
Orc orc = new Orc();
imageWidth = orc.getWidth();
pane.getChildren().add(orc);
list.add(orc);
}
}
最佳答案
传入您要创建的类型的Supplier
:
public <T extends Sprite> void addThings(List<? super T> list, Supplier<T> supplier) {
然后用该供应商的调用替换构造函数:
T thing = supplier.get();
imageWidth = thing.getWidth();
pane.getChildren().add(thing);
list.add(thing);
您可以像这样调用它:
addThings(listOfDragons, Dragon::new);
addThings(listOfOrcs, Orc::new);
关于java - Java中的优化方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50162172/