Reputation: 28110
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
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 enum
s can implement interface
s.
Upvotes: 2
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