2014-10-06 185 views
2

我試圖將Class傳遞給方法。程序運行時,Class會發生變化,所以我想重複使用我的程序中的相同方法,而不是在我的resetWords()方法中調用相同的函數。將類對象傳遞給方法

這裏就是我堅持:

private void getWords(Class c) { 
    singles = c.getSingleSyllables(); 
    doubles = c.getDoubleSyllables(); 
    triples = c.getTripleSyllables(); 
    quadruples = c.getQuadrupleSyllables(); 
    quintuples = c.getQuintupleSyllables(); 
} 

private void resetWords() { 
    if (generated.equals("SOMETHING")) { 
     Something c = new Something(); 
     getWords(c); 
    } 
    else if (generated.equals("ANOTHER")) { 
     Another c = new Another(); 
     getWords(c); 
    } 
} 

回答

3

我想你要找的是一個接口。你應該聲明這樣的接口:

public interface Passable 
{ 
    public List<String> getSingleSyllables(); 
    public List<String> getDoubleSyllables(); 
    // ... 
} 

然後,讓SomethingAnother實現它們:

public class Something implements Passable 
{ 
    // method declarations 
} 

現在,改變你的方法是:

private void getWords (Passable c) { 
    singles = c.getSingleSyllables(); 
    doubles = c.getDoubleSyllables(); 
    triples = c.getTripleSyllables(); 
    quadruples = c.getQuadrupleSyllables(); 
    quintuples = c.getQuintupleSyllables(); 
} 
2

有點含糊,你要問什麼,但也許是創建一個Interface定義所有的getXSyllables()方法。讓你的班級(SomethingAnother)實施Interface。最後,將getWords定義爲private void getWords(YourInterface c)

1

你在混淆類和對象。

你傳遞給getWords()的是一個對象。在第一種情況下,它是Something類型的對象。在第二種情況下,它是Another類型的對象。

對於這樣的代碼,以工作的唯一方法是定義一個共同的基類或接口,用於SomethingAnother(讓我們稱之爲HavingSyllabes),含在getWords()中使用的5種方法:getSingleSyllables()getDoubleSyllabes()等和簽名getWords()應該

private void getWords(HavingSyllabes c) 
1

如果類始終貫徹getSingleSyllables()getDoubleSyllables()等。那麼你應該考慮從一個抽象類繼承,或實現一個接口。

則...

private void getWords(YourInterface/YourAbstractClass foo) { 
... 
} 
0

您的問題不提供足夠的細節來清晰回答。

根據您的設計/最終目標,有三個概念,你應該看看和了解:

  • 接口
  • 抽象類
  • 反思

的接口將定義實現該接口的類必須提供的方法。每個實現接口的類都必須提供該方法的代碼。

抽象類將提供您正在查找的行爲的單個實現。

反射是一個先進的概念。我建議你此時遠離它 - 但你應該意識到它。

鑑於您的示例代碼,您可能需要使用抽象類。設計正確後,您可以通過定義一個接口來增加靈活性/重用性,使用抽象類實現該接口,然後根據需要擴展該抽象類。每個擴展Abstract的類都將選擇您在Abstract類定義中提供的默認實現;該界面將使您可以輕鬆擴展。