Java中的优化方法
我想在窗格中添加两个敌人,Java中的优化方法,java,oop,Java,Oop,我想在窗格中添加两个敌人,Dragon和Orc。这两个类都扩展了一个名为Entity的超类,我想为这两个方法创建一个方法。我已尝试在您要创建的类型的供应商中使用列表传递: public <T extends Sprite> void addThings(List<? super T> list, Supplier<T> supplier) { 您可以这样调用它: addThings(listOfDragons, Dragon::new); addThings
Dragon
和Orc
。这两个类都扩展了一个名为Entity
的超类,我想为这两个方法创建一个方法。我已尝试在您要创建的类型的供应商中使用列表传递:
public <T extends Sprite> void addThings(List<? super T> list, Supplier<T> supplier) {
您可以这样调用它:
addThings(listOfDragons, Dragon::new);
addThings(listOfOrcs, Orc::new);
传入要创建的类型的供应商
:
public <T extends Sprite> void addThings(List<? super T> list, Supplier<T> supplier) {
您可以这样调用它:
addThings(listOfDragons, Dragon::new);
addThings(listOfOrcs, Orc::new);
通用可能会帮助你
public <T extends Entity> void addEntity(List<T> list, Class<T> clazz) {
double imageWidth = 0;
for(int i = 0; i < 6; i++) {
T entity = clazz.newInstance();
imageWidth = entity.getWidth();
pane.getChildren().add(entity);
list.add(entity);
}
}
public void addEntity(列表,类clazz){
双图像宽度=0;
对于(int i=0;i<6;i++){
T entity=clazz.newInstance();
imageWidth=entity.getWidth();
pane.getChildren().add(实体);
列表。添加(实体);
}
}
通用可能会对您有所帮助
public <T extends Entity> void addEntity(List<T> list, Class<T> clazz) {
double imageWidth = 0;
for(int i = 0; i < 6; i++) {
T entity = clazz.newInstance();
imageWidth = entity.getWidth();
pane.getChildren().add(entity);
list.add(entity);
}
}
public void addEntity(列表,类clazz){
双图像宽度=0;
对于(int i=0;i<6;i++){
T entity=clazz.newInstance();
imageWidth=entity.getWidth();
pane.getChildren().add(实体);
列表。添加(实体);
}
}
为您需要对所有实体执行的操作添加一个接口或向实体添加方法。这将包括一个工厂方法来创建特定子类型的新实例,以及getWidth。使用要添加的类型的原型实例调用addEnemy
public void addEnemy(List<Entity> list,Entity enemy) {
double imageWidth = 0;
for(int i = 0; i < 6; i++) {
Entity someEnemy = enemy.createNewInstance();
imageWidth = someEnemy .getWidth();
pane.getChildren().add(someEnemy );
list.add(someEnemy );
}
public void addEnemy(列表,实体敌人){
双图像宽度=0;
对于(int i=0;i<6;i++){
Entity SomeDebuy=敌人。createNewInstance();
imageWidth=some敌军。getWidth();
pane.getChildren().add(someDebuy);
添加(一些敌人);
}
}为您需要对所有实体执行的操作添加一个接口或向实体添加方法。这将包括一个工厂方法来创建特定子类型的新实例,以及getWidth。使用要添加的类型的原型实例调用addEnemy
public void addEnemy(List<Entity> list,Entity enemy) {
double imageWidth = 0;
for(int i = 0; i < 6; i++) {
Entity someEnemy = enemy.createNewInstance();
imageWidth = someEnemy .getWidth();
pane.getChildren().add(someEnemy );
list.add(someEnemy );
}
public void addEnemy(列表,实体敌人){
双图像宽度=0;
对于(int i=0;i<6;i++){
Entity SomeDebuy=敌人。createNewInstance();
imageWidth=some敌军。getWidth();
pane.getChildren().add(someDebuy);
添加(一些敌人);
}
}考虑到你的班级结构是这样的
public interface Entity {
// abstract methods here
}
public class Orc implements Entity {
//Code here
}
public class Dragon implements Entity {
//Code here
}
现在修改您的方法如下
public <T extends Entity> void addDragon(List<T> list, Class<T> clazz)
throws IllegalAccessException, InstantiationException {
double imageWidth = 0;
for(int i = 0; i < 6; i++) {
T enemy = clazz.newInstance();
imageWidth = enemy.getWidth();
pane.getChildren().add(enemy);
list.add(enemy);
}
}
public void addDragon(列表,类clazz)
抛出IllegalAccessException,实例化Exception{
双图像宽度=0;
对于(int i=0;i<6;i++){
T敌人=clazz.newInstance();
imageWidth=敌人。getWidth();
pane.getChildren().add(敌人);
列表。添加(敌人);
}
}
这里 通过传递实现敌人的任何类,使您的方法能够灵活调用。考虑到您的类结构,如下所示
public interface Entity {
// abstract methods here
}
public class Orc implements Entity {
//Code here
}
public class Dragon implements Entity {
//Code here
}
现在修改您的方法如下
public <T extends Entity> void addDragon(List<T> list, Class<T> clazz)
throws IllegalAccessException, InstantiationException {
double imageWidth = 0;
for(int i = 0; i < 6; i++) {
T enemy = clazz.newInstance();
imageWidth = enemy.getWidth();
pane.getChildren().add(enemy);
list.add(enemy);
}
}
public void addDragon(列表,类clazz)
抛出IllegalAccessException,实例化Exception{
双图像宽度=0;
对于(int i=0;i<6;i++){
T敌人=clazz.newInstance();
imageWidth=敌人。getWidth();
pane.getChildren().add(敌人);
列表。添加(敌人);
}
}
这里 通过传递实现敌人的任何类,使您的方法具有调用的灵活性。“我尝试过使用“列表列表”和“列表列表”[…]”-我不理解。备注:您不应该使用列表
和列表
,而应该使用列表您可以使用一个界面。您能详细说明一下吗,Compass?:)仅供参考,优化通常指性能调整。从这个意义上讲,合并冗余代码并不是一种优化。”我尝试过使用“列表”和“列表”[…]”——我不理解。备注:您不应该使用列表
和列表
,而应该使用列表您可以使用一个界面。您能详细说明一下吗,Compass?:)仅供参考,优化通常指性能调整。从这个意义上讲,合并冗余代码不是一种优化。这只适用于iffT
具有无参数、可访问的构造函数。我应该将该特定方法放在哪个类中?public是一个新类吗?@Yani不是,它是一个泛型方法。但是从它的声明来看,(使用列表这只在iff时有效。T
有一个无参数的、可访问的构造函数。我把那个特殊的方法放在哪个类中?public是一个新类吗?@Yani不,它是一个泛型方法。但是从它的声明来看(使用列表这仅在以下情况下有效。T
具有无参数、可访问的构造函数。@Turing85它没有,因为它将引发选中的异常。@AndyTurner,并且它被设置为不推荐的
=)这只在以下情况下起作用。T
具有无参数、可访问的构造函数。@Turing85不起作用,因为它将引发选中的异常。@AndyTurner,并且它被设置为弃用的
=)我认为常见的超类型是Sprite
。但从技术上讲,上限根本没有必要。@shmosel甚至没有调用width方法(但不知道为什么会这样做…)不,这可能是必要的。我不知道我在想什么。@shmosel好吧,我已经将它更新为使用Sprite
。谢谢。我认为常见的超类型是Sprite
。但从技术上讲,上限根本不必要。@shmosel甚至没有调用width方法(但不知道为什么会这样做…)不,这可能是必要的。我不知道我在想什么。@shmosel好吧,我已经将它更新为使用Sprite
。谢谢。