gpt4 book ai didi

java - 我们如何在 Lambda 表达式中实现它?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:10:24 24 4
gpt4 key购买 nike

首先我们必须在其他文件或同一个文件中为 lambda 表达式声明接口(interface)。但是如果我们可以在方法声明中这样做会更容易。有吗?

 public class LambdaAppJava8 {
public int fonk(
int a,
int b,
interface MyInterface{
public int call(int a, int b);
} anonim
) {
return anonim.call(a, b);
}

public static void main(String[] args) {
LambdaAppJava8 app = new LambdaAppJava8();
System.out.println(app.fonk(1, 3, (c, d) -> c + d));
}
}

最佳答案

无法在方法声明中直接声明接口(interface),但您可以将其设为足够接近的嵌套类型。

public class LambdaAppJava8 {
private interface MyInterface {
public int call(int a, int b);
}
public int fonk(int a, int b, MyInterface anonim) {
return anonim.call(a, b);
}
public static void main(String[] args) {
LambdaAppJava8 app = new LambdaAppJava8();
System.out.println(app.fonk(1, 3, (c, d) -> c + d));
}
}

匿名interface的含义似乎也存在误解。您可以在方法内声明匿名类,但这些类不是“即时”声明的;它们仍然是在编译时创建的类型,具有自己的类文件,该文件不小于顶级类型,实际上恰恰相反。此类类型具有比顶级类型更大的类文件,因为它们包含有关定义它们的周围环境的元信息。

如果有一种方法可以在方法的参数列表中声明一个接口(interface),那也不会改变;它不会比在其他任何地方声明它更有效。但它需要特殊的范围规则异常(exception),因为在正常的范围规则下,您不能调用需要方法本地类型参数的方法,因为调用者不知道该类型。


但请注意,上面的示例实际上是您想要实现的。您还可以将 MyInterface 的声明更改为 public 并且其他类可以使用 lambda 表达式调用该方法,就像用例 app.fonk(1, 3 , (c, d) -> c + d) 无需导入 MyInterface。您的问题似乎是关于什么的,调用者不必处理专门为 fonk 参数定义的 interface,编译器会处理。

关于java - 我们如何在 Lambda 表达式中实现它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29691110/

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