java - Java中的优化方法
问题描述
我想在窗格中添加两个敌人,Dragon
并且Orc
. 这两个类都扩展了一个名为 的超类Entity
,我想为这两种方法创建一个方法。我曾尝试使用List<? extends Sprite> list
and 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);
推荐阅读
- php - 应用\任务::first()->项目;在工匠修补匠返回null,无论如何:(
- css - 媒体查询中的变量
- javascript - 如何动态访问数组中的索引?
- javascript - 如何通过 promise/async-await 返回 Papa 解析的 CSV
- javascript - 如何修复clearRect?
- internet-explorer - jsPDF - 对象不支持属性或方法“表”
- dns - 无法将 VM 加入 AD - 无法完成此功能
- autosar - AUTOSAR BswMLinScheduleIndication 容器内容说明
- authentication - 带有自定义标头名称的 Swagger/OpenAPI Bearer 身份验证
- javascript - ReferenceError:赋值的左侧不是参考