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();
}});