Max K
Max K

Reputation: 676

Java: most efficient way of changing method arguments

I have a problem. So, assume there is this class native to the JRE with 100+ methods:

class HundredMethods {

  public void method1(int) {
  }

  public void method2(int) {
  }

  ... (98 more methods)

}

and I want to alter the arguments of 5 of those methods. Specifically, integers to doubles. and add an extra double argument
My current solution involves a wrapper class that:
-A: Provides direct access to the original class
-B: Has five methods that "translate" double arguments (with some extra inputs) into the integer arguments of the original. So:

class WrapperMethods{
   public HundredMethods original = (assigned at constructor)

   public void method1(double,double(extra)) {
     int i = (assigned a value in "code" below)
     this.original.method1(i);
   }
}

Is there another lightweight solution to both changing and adding arguments to a few methods in a "heavy" class besides the one above? In terms of actually implementing this solution in my code, I've found that it can get messy when a user doesn't know what methods the wrapper class changes. In fact, I have a roughly 250+ method class that I'm changing 25 methods of, so the bigger the class, the messier my code becomes. Considering that I want to publish my code as public, someone would have to look up what methods the wrapper changes every time they wanted to use the wrapper.

Thanks!

Upvotes: 3

Views: 132

Answers (1)

Erwin Bolwidt
Erwin Bolwidt

Reputation: 31269

You can make a subclass and add in 2 methods for each of the five methods that you want to modify. One that takes a double, that does your logic and does a super. invocation to the original method, and one that takes an int and makes sure that it does the same thing as when you pass in a double.

All the other 95 methods will still be accessible through your subclass as normal.

class WrapperMethods extends HundredMethods {
    public void method1(double d) {
        int i = (assigned a value in "code" below)
        super.method1(i);
    }

    public void method1(int i) {
        // Make sure that any calls that happen to pass in an integer,
        // also go by your logic.
        this.method1((double)i);
    }
}

Upvotes: 2

Related Questions