0

我有一堂有几种方法的课。现在我想定义一个只对方法 A 可见的辅助方法,就像旧的“子函数”一样。

public class MyClass {
    public methodA() {
        int visibleVariable=10;
        int result;
        //here somehow declare the helperMethod which can access the visibleVariable and just 
        //adds the passed in parameter
        result = helperMethod(1);
        result = helperMethod(2);
    }
}

helperMethod 仅由 MethodA 使用,并且应该访问 MethodA 声明的变量 - 避免显式传入许多已在 methodA 中声明的参数。

那可能吗?

编辑:帮助方法只是用于避免重复大约 20 行代码,这些代码仅在 1 个地方不同。并且这 1 个地方可以很容易地参数化,而在这两种情况下 methodA 中的所有其他变量都保持不变

4

5 回答 5

4

那么你可以声明一个本地类并将方法放在那里:

public class Test {

    public static void main(String[] args) {
        final int x = 10;

        class Local {
            int addToX(int value) {
                return x + value;
            }
        }

        Local local = new Local();

        int result1 = local.addToX(1);
        int result2 = local.addToX(2);
        System.out.println(result1);
        System.out.println(result2);
    }
}

But that would be a very unusual code. Usually this suggests that you need to take a step back and look at your design again. Do you actually have a different type that you should be creating?

(If another type (or interface) already provided the right signature, you could use an anonymous inner class instead. That wouldn't be much better...)

于 2013-08-05T06:24:05.140 回答
1

鉴于您在方法顶部声明的变量可以标记为最终变量(这意味着它们在初始化后不会更改)您可以在下面的帮助器类中定义您的帮助器方法。顶部的所有变量都可以通过构造函数传递。

public class HelperClass() {
   private final int value1;
   private final int value2;
   public HelperClass(int value1, int value2) {
       this.value1 = value1;
       this.value2 = value2;
   }
   public int helperMethod(int valuex) {
       int result = -1;
       // do calculation
       return result;
   }
}

您可以创建 HelperClass 的实例并在方法中使用它

于 2013-08-05T06:27:49.937 回答
0

这不可能。这也不是好的设计。违反变量范围的规则是使您的代码出现错误、不可读和不可靠的可靠方法。如果你真的有这么多相关的变量,考虑把它们放到自己的类中,给那个类一个方法。

如果您的意思更类似于 lambda 表达式,那么不,目前在 Java 中这是不可能的(但希望在Java 8中)。

于 2013-08-05T06:21:39.167 回答
0

methodA() 不是方法,它缺少返回类型。

您不能直接从另一个方法访问在一个方法中声明的变量。

您要么必须将它们作为参数传递,要么必须在其自己的类中声明 methodA 以及 helpermethods。

这可能是最好的方法:

public class MyClass {

    public void methodA() {
        int visibleVariable=10;
        int result;

        result = helperMethod(1, visibleVariable);
        result = helperMethod(2, visibleVariable);
    }

    public int helperMethod(int index, int visibleVariable) {
        // do something with visibleVariable
        return 0;
    }
}
于 2013-08-05T06:22:54.123 回答
0

No, it is not possible.

I would advise you create a private method in your class that does the work. As you are author of the code, you are in control of which other methods access the private method. Moreover, private methods will not be accessible from the outside.

根据我的经验,方法不应该声明大量变量。如果他们这样做了,那么您的设计很有可能存在缺陷。想想常量,如果你不能private final在你的类中将其中的一些声明为变量。或者,考虑 OO,您可能缺少一个对象来携带这些变量并为您提供一些与这些变量的处理相关的功能。

于 2013-08-05T06:27:09.517 回答