所以我试图整合并在我的流程中添加一个通用函数来减少重复代码。我想要这样的东西:
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调用函数并将其激活。希望这更有意义答案 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();
//...
}