2011-11-27 150 views
2

假設我有一個類,並且我希望它的某個方法根據參數具有不同的行爲。我想要做的就是這樣的事(我知道這並不在Java中工作):將參數傳遞給Java中的類

class myClass(int a) { 
    public void myMethod() { 
     if (a == 1) 
      // do something 
     if (a == 2) 
      // do something else 
    } 
} 

有沒有辦法做到這一點?

回答

6

你有兩種方法可以做到這一點。

  • 將參數傳遞給類構造器,並保留對其的本地引用。然後,您可以在班級的所有方法中使用它。

像這樣:

class MyClass { 
    private final int a; 

    public MyClass(int a) { 
     this.a = a; 
    } 

    public void myMethod() { 
     if (a == 1) 
      // do something 
     if (a == 2) 
      // do something else 
    } 
} 
  • 傳遞參數的方法,如果你打算只在該方法中使用它。

就像是:

class MyClass { 
    public void myMethod(int a) { 
     if (a == 1) 
      // do something 
     if (a == 2) 
      // do something else 
    } 
} 
+0

是的,構造函數是最適合的。 – user1010399

+0

這取決於如果這只是方法的參數,或者需要在類中多次重複使用的東西 – Guillaume

+0

謝謝,這個作品。但是當我聲明它爲「private final int」時,它說「不能將值賦給最終變量hashType」。所以我宣稱它是一個變量。也許我做錯了什麼? – hattenn

4

參數必須傳遞給方法,而不是類:

class MyClass { // note that class names should start with an uppercase letter. 
    public void myMethod(int a) { 
     if (a == 1) 
      // do something 
     if (a == 2) 
      // do something else 
    } 
} 

閱讀Java language tutorial

+2

類名「應該」不是以大寫字母開頭,遵循Sun命名標準只是一個好習慣。 – Guillaume

+0

「應該」遵循這些良好做法,因此班級名稱「應該」以大寫字母開頭。如果這是絕對的規則,我會說「必須」,而不是「應該」。 –

+0

哦,好吧,英語不是我的母語;) – Guillaume

2

可以在構造函數中

class MyClass { 
    private int a; 
    public MyClass(int a){ 
     this.a = a; 
    } 
    public void myMethod() { 
     if (a == 1) 
      // do something 
     if (a == 2) 
      // do something else 
    } 
} 
1

Polymorphism通過這個參數是要走的路。首先用抽象方法myMethod()定義基類,然後用兩個類來擴展它,從而提供該方法的兩種不同實現。

+0

哦不,不是!繼承是邪惡的,很可能會產生不可讀的代碼,並且很難維護和測試。隨時隨地組成繼承。 – Guillaume