gpt4 book ai didi

java - 使用方法引用定义 BroadcastReceiver.onReceive

转载 作者:行者123 更新时间:2023-12-01 21:13:08 26 4
gpt4 key购买 nike

使用 Jack 对 Java 8 的支持,我希望能够编写类似的内容:

public void onReceive(Context context, Intent intent) {
if (!intent.getAction().equals(ACTION_BINGO)) return;
Log.d(TAG, "Bingo!");
}

...

registerReceiver(this::onReceive, INTENT_FILTER_BINGO);

不幸的是,这是不可能的。虽然 onReceive()BroadcastReceiver 特有的抽象方法,但那东西不是一个接口(interface),而是一个抽象类>,它似乎无法被 lambda 表达式替换。有什么建议可以解决这个问题吗?

最佳答案

使用this answer中概述的技巧,这是我得到的:

public class BroadcastReceiver extends android.content.BroadcastReceiver {

private final BiConsumer<Context, Intent> receiver;

public BroadcastReceiver(final BiConsumer<Context, Intent> onReceive) {
receiver = onReceive;
}

@Override
public void onReceive(Context context, Intent intent) {
if (receiver == null) {
throw new UnsupportedOperationException("Not yet implemented");
}
receiver.accept(context, intent);
}
}

不像我预期的那么简洁,但更好:

BroadcastReceiver receiver = new BroadcastReceiver(this::onReceive);
registerReceiver(receiver, INTENT_FILTER_BINGO);

关于java - 使用方法引用定义 BroadcastReceiver.onReceive,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40800926/

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