gpt4 book ai didi

Java - 通用泛型函数参数

转载 作者:行者123 更新时间:2023-11-29 05:09:19 26 4
gpt4 key购买 nike

因此,我正在尝试整合通用功能并将其添加到我的流程中,以减少重复代码。我想要这样的东西:

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com