user387184
user387184

Reputation: 11053

how to declare a helper method in java, to be used locally being able to reference variables

I have a class with several methods. Now I would like to define a helper method that should be only visible to method A, like good old "sub-functions" .

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

The helperMethod is only used by MethodA and should access MethodA's declared variables - avoiding passing in explicitly many parameters which are already declared within methodA.

Is that possible?

EDIT: The helper mehod is just used to avoid repeating some 20 lines of code which differ in only 1 place. And this 1 place could easily be parameterized while all the other variables in methodA remain unchanged in these 2 cases

Upvotes: 0

Views: 1569

Answers (5)

Akinakes
Akinakes

Reputation: 657

methodA() is not a method, it's missing a return type.

You can't access variables declared in a method from another method directly.

You either has to pass them as arguments or declare methodA in its own class together with the helpermethods.

This is probably the best way to do it:

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

Upvotes: 0

Dev Blanked
Dev Blanked

Reputation: 8865

Given the variables you declare at the top of your method can be marked as final (meaning they don't change after being initialized) You can define your helper method inside a helper class like below. All the variables at the top could be passed via the constructor.

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

you can create an instance of HelperClass and use it inside the method

Upvotes: 1

Eric Tobias
Eric Tobias

Reputation: 3266

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.

In my experience, methods should not declare a load of variables. If they do, there is a good chance that your design is flawed. Think about constants and if you couldn't declare some of those as private final variables in your class. Alternatively, thinking OO, you could be missing an object to carry those variables and offer you some functionality related to the processing of those variables.

Upvotes: 0

Jon Skeet
Jon Skeet

Reputation: 1502286

Well you could declare a local class and put the method in there:

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...)

Upvotes: 4

Chris Hayes
Chris Hayes

Reputation: 12050

It is not possible. It is also not good design. Violating the rules of variable scope is a sure-fire way to make your code buggy, unreadable and unreliable. If you really have so many related variables, consider putting them into their own class and giving a method to that class.

If what you mean is more akin to a lambda expression, then no, this is not possible in Java at this time (but hopefully in Java 8).

Upvotes: 0

Related Questions