Java - 多功能通用函数参数

时间:2015-03-24 18:15:05

标签: java

所以我试图整合并在我的流程中添加一个通用函数来减少重复代码。我想要这样的东西:

private <T> void cacheOrCall(T in) {
    // just want to execute any function passed here
    // in.execute? don't know how to fire these
}

锅炉板要大得多,这就是为什么我想集中这个,但我希望我的函数调用看起来像:

cacheOrCall(mApi.getAlerts(mContext));
cacheOrCall(mApi.getSummary(mContext));
cacheOrCall(mApi.getHeadlines(mContext));

所以我的问题是我是否正确处理这个通用函数参数?我如何执行作为参数传递的泛型函数?

提前谢谢你

编辑:对不起&#34; in&#34; function是异步API调用。我系统中的回调是一个事件总线,所以我不关心这个函数听什么。我只是想让它发出我给它的api电话。然而,这可以是各种不同的API呼叫。我希望这个函数接受我给它的任何api调用函数并将其激活。希望这更有意义

1 个答案:

答案 0 :(得分:3)

如果我理解正确,你想传入一个只在必要时调用的函数。一种方法是接受Runnable:

private void cacheOrCall(Runnable in, ApiCommand command, String cacheKey) {
  //...
  in.run();
  //...
}

使用Java 8+,您可以使用lambda调用该方法:

cacheOrCall(() -> mApi.getData(mContext), myCommand, myCacheKey);

使用Java 7-您可以传递一个匿名类:

Runnable in = new Runnable() { public void run() {
                                  mApi.getData(mContext);
                               }
                             };

cacheOrCall(in, myCommand, myCacheKey);

如果您需要返回值,则可以使用Callable<T>代替Runnable

private <T> void cacheOrCall(Callable<T> in, ApiCommand command, String cacheKey) {
  //...
  T result = in.call();
  //...
}