【问题标题】:Passing an argument to a class in Java将参数传递给Java中的类
【发布时间】:2012-01-07 07:25:16
【问题描述】:

假设我有一个类,我希望它的一个方法根据参数表现不同。我想做的是这样的(我知道这在 Java 中不起作用):

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

有没有办法做到这一点?

【问题讨论】:

    标签: java class parameter-passing


    【解决方案1】:

    你有两种方法可以做到这一点。

    • 将参数传递给类构造器,并保留对它的本地引用。然后,您可以在类的所有方法中使用它。

    像这样:

    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
        }
    }  
    

    【讨论】:

    • 这取决于这只是方法的一个参数,还是需要在类中多次重用的东西
    • 谢谢,这行得通。但是当我将它声明为“private final int”时,它会说“不能为最终变量 hashType 赋值”。所以我将它声明为一个变量。也许我做错了什么?
    • final 仅表示一旦在构造函数中(或在声明时)分配了值,就无法更改。这不是必需的,如果您稍后确实尝试重新分配它,它将不起作用。私有是好的,应该使用,以保持封装。
    • @hattenn:java中的每个keyword都有特定的属性,所以在使用之前最好知道属性。
    【解决方案2】:

    参数必须传递给方法,而不是类:

    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

    【讨论】:

    • 类名“不应该”以大写字母开头,遵循 Sun 命名标准只是一个好习惯。
    • 并且“应该”遵循这些良好做法,因此类名“应该”以大写字母开头。如果这是绝对规则,我会说“必须”,而不是“应该”。
    • 哦,好吧,英语不是我的母语;)
    【解决方案3】:

    你可以在构造函数中传递这个参数

    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
        }
    }
    

    【讨论】:

      【解决方案4】:

      Polymorphism 是要走的路。首先使用抽象方法 myMethod() 定义您的基类,然后使用提供该方法的两种不同实现的两个类对其进行扩展。

      【讨论】:

      • 哦,不,不是!继承是邪恶的,很可能会产生不可读的代码,并且难以维护和测试。组合优于继承,随时可用。
      猜你喜欢
      • 2014-05-25
      • 1970-01-01
      • 2018-10-20
      • 2011-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-28
      相关资源
      最近更新 更多