因此,我正在尝试整合通用功能并将其添加到我的流程中,以减少重复代码。我想要这样的东西:
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));
所以我的问题是我是否正确处理了这个通用函数参数?我如何执行作为参数传递的通用函数?
提前谢谢你
编辑:抱歉,“in”函数是一个异步 API 调用。我系统中的回调是一个事件总线,所以我不关心这个函数监听任何东西。我只是想让它触发我给它的 api 调用。但是,这可以是各种不同的 api 调用。我希望这个函数接受我给它的任何 api 调用函数并触发它。希望这更有意义
最佳答案
如果我理解正确的话,您想传递一个只在必要时调用的函数。一种方法是接受一个 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();
//...
}
关于Java - 通用泛型函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29239978/