Java 在一行上调用多个方法?
如果我的程序中有这样一行:Java 在一行上调用多个方法?,java,methods,Java,Methods,如果我的程序中有这样一行: 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.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中是什么索引。您可以修改
Fireball
方法,因此它们返回该类的一个实例(换句话说返回这个;
)
有了这一点,我们需要
new Fireball(tileMap).setPosition(20, 20)
将返回最近创建的实例,因此您可以从该实例调用setLeft()
。
您也可以为setLeft()
实现此功能
public Fireball setLeft() {
...
return this;
}
要做到这一点,您的
Fireball
类应该遵循模式,即方法返回实例本身。因此,您可以将该方法连成一行
例如,方法:看起来你太简洁了,在这个过程中可能会击中自己的脚。您不需要知道ArrayList索引就可以设置要添加的Fireball对象。您只需要有一个对象的引用,通过创建一个局部Fireball变量,设置它,然后将其添加到ArrayList中,就可以轻松地做到这一点 为什么不干脆做:
Fireball fireball = new Fireball(tileMap);
fireball.setPosition(20, 20);
fireball.setLeft();
fireBalls.add(fireball);
虽然我相信气垫船的答案是目前为止最好的,但另一种解决方案可能是编写一个更好的构造函数 这里可以使用一个构造函数,该构造函数采用一个
tileMap
(无论是什么)、两个int
作为设置位置,以及一个布尔值或枚举或适合setLeft()
做的任何事情
fireballs.add(new Fireball(tileMap, 20, 20, true));
您可以这样制作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();
}
}您可以像这样使用匿名内部类
fireBalls.add(new Fireball(tileMap){{setPosition(20, 20);}});
或
我有时在测试中使用它。不是最可读的方式
将setPosition(int,int)
和setLeft
的返回类型更改为Fireball
?您只需添加一个即可返回
作为方法的最后一行。不过,向构造函数添加更多参数似乎更明智。此外,您可以在将实例添加到列表之前创建该实例,或者如果您想在将其添加到列表之后获取索引,则只需执行Fireball justAdded=Fireball.get(Fireball.size()-1))代码>有一件事是尽量简洁,也许这就是其中之一。最好的答案可能是根本不这样做。使用多行。我不是Java专业人士,但我无法想象使用多行代码会对性能产生丝毫影响。。。但它肯定会增加可读性。。。这增加了可维护性。。。这提高了性能…@nhgrif我不能使用多行,因为我不知道添加到ArrayList中的火球的索引。@SparklyLama:那没有意义——你不需要知道索引。您只需要有一个对象的引用,通过创建一个局部Fireball变量,设置它,然后将其添加到ArrayList中,就可以轻松地做到这一点。例如,请看我答案中的代码。这是一个很好的选择,可以替代其他人的建议。谢谢你的帮助+1我认为公认的答案应该改为这个。
fireBalls.add(new Fireball(tileMap){{setPosition(20, 20);}});
fireBalls.add(new Fireball(tileMap){{
setPosition(20, 20);
setLeft();
}});