返回函数的Java方法?

时间:2015-04-11 23:00:17

标签: java guava generic-collections

我正在使用Guava collections' transform functions,发现自己制作了很多像这种伪代码一样的匿名函数:

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

...但是由于我需要重用其中的一部分,我想将频繁的部分放入一个类中以便于访问。

我很尴尬地说(因为我不太使用Java),我无法弄清楚如何使类方法返回这样的函数。你能吗?

2 个答案:

答案 0 :(得分:5)

我认为您要做的是创建一个可以在整个代码中重复使用的公共静态函数。

例如:

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

或者如果你想要冷静并使用lambdas

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

答案 1 :(得分:1)

只需将其封装到一个类中:

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

然后你可以在客户端代码中使用这个类:

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

如果您的功能彼此相关,您也可以将它们封装到enum中,因为enum可以实现interface