如果我的程序中有这样的行:
fireBalls.add(new Fireball(tileMap).setPosition(20, 20)); // set position is a method of the fireball class
如何在同一行上调用多个这样的方法?
我试过了:
fireBalls.add(new Fireball(tileMap).setPosition(20, 20).setLeft());
但是setLeft()
方法不能放在那里,因为无法在void类型上调用它。
我不能将它们分开,因为我不知道它在fireBalls ArrayList中的索引。
答案 0 :(得分:6)
您可以修改Fireball
方法,以便返回该类的实例(换言之return this;
)
public Fireball setPosition(int x, int y) {
...
return this;
}
用这个,调用
new Fireball(tileMap).setPosition(20, 20)
将返回最近创建的实例,因此您可以从该实例调用setLeft()
。
您也可以为setLeft()
实现此功能。
public Fireball setLeft() {
...
return this;
}
答案 1 :(得分:5)
看起来你似乎过于简洁,在这个过程中可能会让自己陷入困境。您不需要知道ArrayList索引来设置您正在添加的Fireball对象。您只需要引用该对象,您可以通过创建本地Fireball变量,设置它,然后将其添加到ArrayList来轻松实现。
为什么不简单地做:
Fireball fireball = new Fireball(tileMap);
fireball.setPosition(20, 20);
fireball.setLeft();
fireBalls.add(fireball);
答案 2 :(得分:3)
为此,您的Fireball
类应遵循builder模式,哪些方法返回实例本身。因此,您可以将该方法链接起来。
答案 3 :(得分:1)
虽然我认为Hovercraft的答案是迄今为止最好的,但另一种解决方案可能是编写一个更好的构造函数。
一个构造函数,它接受tileMap
(不管是这样),两个ints
用于设置位置,以及boolean
或枚举或适合任何setLeft()
的内容可以在这里使用。
fireballs.add(new Fireball(tileMap, 20, 20, true));
答案 4 :(得分:0)
你可以像这样建立mathod链:
class a{
static a obj= new a();
static a show(){
System.out.println("omg");
return obj;
}
static a show2(){
System.out.println("god");
return obj;
}
void show3(){
System.out.println("Research done");
}
}
公共课eg4 {
public static void main (String hv[]){
a obj2= new a();
obj2.show().show2().show3();
}
}
答案 5 :(得分:0)
您可以使用像这样的匿名内部类
fireBalls.add(new Fireball(tileMap){{setPosition(20, 20);}});
或
fireBalls.add(new Fireball(tileMap){{
setPosition(20, 20);
setLeft();
}});
我有时会在测试中使用它。不是最易读的方式。