2014-01-18 16 views
2

내 프로그램에서이 같은 라인이있는 경우 : 그와 같은 다수의 메소드를 호출 할 수있는 방법한 줄에 여러 메서드 호출?

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() 방법은, 거기에 넣어 수 없습니다. fireBalls ArrayList에 어떤 인덱스가 있는지 알지 못하므로 별도의 줄에 표시 할 수 없습니다.

+0

변화로 setPosition '의 반환 형식 (int, int)'와'setLeft'를'Fireb 모두'? 메서드의 마지막 줄에'return this;'를 추가하면됩니다.하지만 생성자에 더 많은 매개 변수를 추가하는 것이 더 바람직합니다. 또한 목록에 추가하기 전에 인스턴스를 만들거나'List'에 추가 한 후에 인덱스를 얻고 싶다면'Fireball justAdded = fireBalls.get (fireBalls.size() - 1)); ' –

+2

너무 간결하게하려고하는 것과 같은 것이 있으며 아마도 이것은 그 사건 중 하나입니다. –

+0

가장 좋은 대답은 아마 이런 일을하지 않는 것입니다. 여러 줄을 사용하십시오. 나는 자바 프로가 아니지만 여러 줄을 사용하면 약간의 성능 향상을 가져올 것이라고 상상할 수는 없지만 확실하게 가독성을 높여서 유지 관리 가능성을 높여줍니다 ... – nhgrif

답변

4

것 같습니다. 추가 할 Fireball 객체를 설정하기 위해 ArrayList 인덱스를 알 필요가 없습니다. 객체에 대한 참조 만 있으면되며 로컬 Fireball 변수를 만들어 설정 한 다음 ArrayList에 추가하면 쉽게 그 작업을 수행 할 수 있습니다.

이유는 단순히 수행합니다 나는 호버의 대답은 단연 최고입니다 생각하지만

Fireball fireball = new Fireball(tileMap); 
fireball.setPosition(20, 20); 
fireball.setLeft(); 
fireBalls.add(fireball); 
+0

이것은 다른 사람들이 제안하는 훌륭한 대안입니다. 도와 주셔서 감사합니다! +1 – sparklyllama

+1

허용되는 대답은이 의견으로 변경해야합니다. – nhgrif

5

당신은 당신의 Fireball 방법을 수정할 수 있습니다, 그래서 그들이 만든 최근 돌아갑니다이와

public Fireball setPosition(int x, int y) { 
    ... 
    return this; 
} 

(즉 return this;에)

new Fireball(tileMap).setPosition(20, 20) 

에 대한 호출을 해당 클래스의 인스턴스를 반환 인스턴스이므로 해당 인스턴스에서 setLeft()으로 전화 할 수 있습니다. setLeft()에 대해서도이를 구현할 수 있습니다.

public Fireball setLeft() { 
    ... 
    return this; 
} 
+0

고맙습니다. :) – sparklyllama

3

그렇게하려면 Fireball 클래스 메소드는 인스턴스 자체를 반환하는 builder 패턴을 따라야합니다. 따라서 메서드를 한 줄에 연결할 수 있습니다. 예를 들어, 방법

: 당신이 너무 간결하고 프로세스가 가능 발에서 자신을 촬영 될하려는처럼 java.lang.StringBuilder#append()

1

는, 대체 솔루션이 더 나은 생성자를 작성할 수 있습니다.

(이것은 무엇이든)을 tileMap를 사용하는 생성자, 위치를 설정하기위한 두 ints뿐만 아니라 boolean 또는 열거 나 여기에 사용될 수 않습니다 어떤 setLeft()에 적합한 뭔가. 이 같은

fireballs.add(new Fireball(tileMap, 20, 20, true)); 
+0

실제로 - 1+ upvote –

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

}

관련 문제