首页 > 解决方案 > Java中的优化方法

问题描述

我想在窗格中添加两个敌人,Dragon并且Orc. 这两个类都扩展了一个名为 的超类Entity,我想为这两种方法创建一个方法。我曾尝试使用List<? extends Sprite> listand 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);
    }
}

标签: javaoop

解决方案


传入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);

推荐阅读