2011-11-27 112 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