Search code examples
javaclosuresfunction-pointers

What's the nearest substitute for a function pointer in Java?


I have a method that's about ten lines of code. I want to create more methods that do exactly the same thing, except for a small calculation that's going to change one line of code. This is a perfect application for passing in a function pointer to replace that one line, but Java doesn't have function pointers. What's my best alternative?


Solution

  • Anonymous inner class

    Say you want to have a function passed in with a String param that returns an int.
    First you have to define an interface with the function as its only member, if you can't reuse an existing one.

    interface StringFunction {
        int func(String param);
    }
    

    A method that takes the pointer would just accept StringFunction instance like so:

    public void takingMethod(StringFunction sf) {
       int i = sf.func("my string");
       // do whatever ...
    }
    

    And would be called like so:

    ref.takingMethod(new StringFunction() {
        public int func(String param) {
            // body
        }
    });
    

    EDIT: In Java 8, you could call it with a lambda expression:

    ref.takingMethod(param -> bodyExpression);