- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在我的库中,我有一个简单的适配器接口(interface)可以注册。
Adapter firstAdapter = new FirstAdapter(String someParam);
Adapter secondAdapter = new SecondAdapter(int otherParam, String eventAnotherParam);
something.register(firstAdapter)
.register(secondAdapter);
适配器在构造函数中获取参数的地方。
我希望能够使用 FunctionalInterface 类型的适配器,但在这部分我不知道,有多少参数甚至是什么类型可能需要传递到 lambda 内部进行评估。
有什么办法可以解决这个问题吗?我希望能够做这样的事情:
something.register(firstAdapter)
.register(secondAdapter)
.register((String whatever, String whateverElse) -> whatever.equalsTo(whateverElse))
.register((int i) -> i>5);
编辑 {dsh}:
接口(interface)可能是这样的,但这并不重要,它只是抽象:
@FunctionalInterface
interface Adapter {
boolean test();
}
interface Something {
Something register(Adapter adapter);
}
最佳答案
在幕后,可变参数将是一个数组。
因此您可以将功能接口(interface)实现为:
@FunctionalInterface
public interface TestFunctionalInterface<T> {
public Boolean test(T... args);
}
然后像这样创建 lambda:
something.register(firstAdapter)
.register(secondAdapter)
.register((Integer[] x) -> (x[0] > 5))
//or
.register(x -> ((int) x[0] > 5)
//or
.register(x -> x[0].equals(x[1]);
请注意,我在这里没有列出每个 lambda 参数,而是将它们作为一个数组来引用。
当然,您可以将功能接口(interface)的输入/返回类型更改为更具体的内容,而不是使用泛型,如我的示例所示。
关于java - 使用可变参数计数的 FunctionalInterface 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31990168/
这个问题在这里已经有了答案: Should 'Comparable' be a 'Functional interface'? (4 个答案) 关闭 5 年前。 Comparable 和 Compa
尝试编译 Java 时 @FunctionalInterface具有超过 1 个非抽象方法会引发编译错误。 但是,在 Kotlin 中执行相同操作时,不会引发错误或警告,即以下 Kotlin inte
我正在尝试创建一个可以抛出自定义异常的函数式接口(interface),我的想法是。 public class MyException extends Exception { public M
我正在学习将一些 lambda 表示形式写成 FunctionalInterface .所以,要添加我使用的两个整数: BiFunction biFunction = (a, b) -> a + b;
简介 在搜索网络时,我偶然发现了 Benoit Tellier 的博客文章,Next level Java 8 staged builders ,他在其中分享了针对某些用例的分阶段构建器模式的变体。
假设我有以下界面: @FunctionalInterface public interface First { int fun(int a); } 还有 @FunctionalInterface
为什么我不能使用默认方法实现创建 @FunctionalInterface? @FunctionalInterface public interface MyInterface { defau
下面的接口(interface)是 Java 8 中的有效功能接口(interface)吗? @FunctionalInterface interface Normal{ public abs
Said in Javadoc : If a type is annotated with this annotation type, compilers are required to genera
考虑这个接口(interface): @FunctionalInterface public interface ThrowingFunction { R tryApply(T t)
在我的库中,我有一个简单的适配器接口(interface)可以注册。 Adapter firstAdapter = new FirstAdapter(String someParam); Adapte
Said in Javadoc : If a type is annotated with this annotation type, compilers are required to genera
在 Java 8 中,引入了接口(interface)的默认方法,以便在不破坏向后兼容性的情况下向现有接口(interface)添加方法。 由于默认方法是非抽象的,因此它们可用于制作具有多个可覆盖方法
我最初的问题与 this one 完全相同;也就是说,为什么这个接口(interface)有运行时保留策略。 但是接受的答案根本不让我满意,原因有二: 这个接口(interface)是 @Docume
我一直在学习 Java 8 的特性,到目前为止已经成功实现了它们,但我最新的代码引发了两个问题。 第一个问题可以通过强制转换来解决,但是这里不应该发生这种情况,因为类型继承应该是健全的;这是在接受单参
学习 Java 8 Lambda 并想知道编译器如何知道 Comparator 中的哪个方法用于 lambda 表达式?好像不是SAM界面?它有 2 个抽象方法: @FunctionalInterfa
学习 Java 8 Lambda,只是想知道编译器如何知道 Comparator 中的哪个方法用于 lambda 表达式?好像不是SAM接口(interface)?它有 2 个抽象方法: @Funct
我刚开始学习 Camel ,我看到的第一件事是 context.addRoutes(new RouteBuilder() { public void configure() {
Callable 会抛出异常,而 Runnable 不会。 有没有标准的样子 @FunctionalInterface public interface TypedBlock { public
这个问题在这里已经有了答案: FunctionalInterface Comparator has 2 abstract methods (3 个答案) 关闭 3 年前。 我想澄清一下我对@Func
我是一名优秀的程序员,十分优秀!