2012-08-11 22 views
3

是否可以將函數存儲在java中的數組中? 舉個例子..方法函數的陣列

public void getMyname(){ 

// do something here; 

} 

public void getLastname(){ 

//do something here; 
} 

Array arr = {getLastName,getMyname}; 

那樣?如果是這樣的話?

+1

這是不可能的(Java的<= 7) - 不直接。但是,如果你解釋你的問題(背景),有人可以幫助你接近這個問題。 ...在某些情況下,你可以使用'Method'類(反射API)或類似命令模式等......取決於上下文 – 2012-08-11 06:47:15

回答

1

您不能在Java中存儲數組中的方法,因爲方法不是Java中的第一類對象。這是有些人更喜歡使用Python,Scheme等其他語言的原因。

解決方法是創建一個包含一個方法的接口,然後創建四個實現該接口的類 - MoveRight,MoveLeft等。類。然後,您可以將這些類的實例存儲在您的數組中,並以同樣的方式調用它們。

public enum Level1 implements Explorable{ 
    ROOM1 { 
     public void explore() { 
      // fight monster 
     } 
    }, ROOM2 { 
     public void explore() { 
      // solve riddle 
     } 
    }, ROOM3 { 
     public void explore() { 
      // rescue maiden 
     } 
    }; 

} 

public interface Explorable{ 
    public abstract void explore();  
} 

public static void move(Explorable[] adjacentNodes, int index) 
{ 
    adjacentNodes[index].explore(); 
} 
+0

也許這是太多的要求,但你能給我一個例子嗎? – androidNoob 2012-08-11 06:36:31

+0

謝謝..我試試這個.. – androidNoob 2012-08-11 06:56:07

+0

ahm w8 im還在搞清楚把這個放在我的活動的哪裏..^_^.. – androidNoob 2012-08-11 07:02:19

2

那麼你可以對我做..

protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    String[] arrwow = {wow(),wow2()}; 
    Toast.makeText(this, arrwow[1], Toast.LENGTH_SHORT).show(); 


} 

public String wow(){ 

    String wow = "wow"; 
    return wow; 
} 
public String wow2(){ 
    String wow2 = "wow2"; 
    return wow2; 
} 

作品..^_ ^古德勒克

+0

謝謝..這給了我想法.. – androidNoob 2012-08-11 06:42:57

0

不,你不能在Java軟件商店功能。如何面向對象?創建一個Person類封裝了名的信息:

public class Person { 
    private String firstName; 
    private String lastName; 

    public String getFullName() { 
     return firstName + " " + lastName; 
    } 

    public String getFirstName() { 
     return firstName; 
    }   

    public void setFirstName(String firstName) { 
     this.firstName = firstName; 
    } 

    public String getLastName() { 
     return lastName; 
    } 

    public void setLastName(String lastName) { 
     this.lastName = lastName; 
    } 
} 

實例化它:

Person person = new Person(); 
person.setFirstName("John"); 
person.setLastName("Doe"); 

現在你有一個對象的工作,我會建議你通過周圍的Person情況下,如儘可能長,因爲這意味着類型信息將被保留。與將人員名稱解除引用到String數組相比,您處理的數據類型(一組名稱,顏色,國家代碼等?)不太明顯。

這就是說,如果你硬要去引用名稱的數據,就不難創建String陣列或List<String>如果你選擇這樣做:

String[] nameArray = {person.getFirstName(), person.getLastName()}; 

// or 

List<String> nameList = new ArrayList<String>(); 
nameList.add(person.getFirstName()); 
nameList.add(person.getLastName());