ewall
ewall

Reputation: 28110

Java method that returns a function?

I'm using Guava collections' transform functions, and finding myself making a lot of anonymous functions like this pseudocode:

    Function<T, R> TransformFunction = new Function<T, R>() {
        public R apply(T obj) {
            // do what you need to get R out of T
            return R;
        }
    };

...but since I need to reuse some of them, I'd like to put the frequent ones into a class for easy access.

I'm embarrassed to say (since I don't use Java much), I can't figure out how to make a class method return a function like this. Can you?

Upvotes: 9

Views: 42202

Answers (2)

Mick Mnemonic
Mick Mnemonic

Reputation: 7956

Simply encapsulate it into a class:

public class MyFunction implements Function<T, R> {
    public R apply(T obj) {
        // do what you need to get R out of T
        return R;
    }
};

Then you can use the class in client code like this:

Function<T, R> TransformFunction = new MyFunction();

If your functions are related to each other, you could also encapsulate them into an enum, because enums can implement interfaces.

Upvotes: 2

satnam
satnam

Reputation: 11484

I think what you want to do is make a public static function that you can re-use throughout your code.

For example:

  public static final Function<Integer, Integer> doubleFunction = new Function<Integer, Integer>() {
    @Override
    public Integer apply(Integer input) {
      return input * 2;
    }
  };

Or if you want to be cool and use lambdas

public static final Function<Integer, Integer> doubleFunction = input -> input * 2;

Upvotes: 13

Related Questions