gpt4 book ai didi

Java lambda 表达式 - 显式目标类型

转载 作者:搜寻专家 更新时间:2023-11-01 01:31:25 25 4
gpt4 key购买 nike

考虑功能接口(interface) AB extends A。当只需要 A 时,是否可以使用 lambda 表达式创建一个不仅实现 A 还实现 B 的实例?

例子:

interface A {
void foo();
}

interface B extends A {}

void bar(A arg) {
System.out.println(arg instanceof B);
}

/* somewhere in a block */
bar( () -> {} ); // Prints "false"

我如何调用 bar(A) 以便它打印 true

我会发现这在事件监听器中很有用,其中子接口(interface)可以指定有关监听器的附加数据,例如如果 Listener 也实现了 ConcurrentListener,它会被并发调用。

最佳答案

简单地做一个转换来告诉编译器你想要的类型:

A a = (B)() -> someAction();
System.out.println(a instanceof B); // true

I would find this useful in event listeners, where subinterfaces could specify additional data about the listener, e.g. if a Listener also implements ConcurrentListener, it is invoked concurrently.

这听起来像是糟糕的设计(虽然我无法解释为什么...)。也许您可以在实现者需要实现的接口(interface)中有一个 isConcurrent 方法?

关于Java lambda 表达式 - 显式目标类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50682137/

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