gpt4 book ai didi

java - 获取lambda的参数和返回值

转载 作者:行者123 更新时间:2023-11-29 06:56:09 25 4
gpt4 key购买 nike

我有一个界面是

public static interface MyClass{
public boolean doSomething(boolean a, boolean b);
}

然后我实例化一个变量

MyClass a = (boolean x, boolean y) -> x && y;

现在我的问题是,如果我想获得参数 x 和 y 以及返回值,我该怎么做呢?我想要获取参数的原因是因为我想要序列化,以便我能够用它们执行 ObjectOutputStream.writeObject()

不确定我的问题是否完全有道理。我没有过多地使用 lambda,因此非常感谢任何形式的指导。

Adding On: OK 所以 MyClass a 在另一个类中被实例化,我们称它为 ParentClass。所以现在我有

MyClass a = (x, y) -> x && y;
ParentClass b = new ParentClass();
b.setMyClass(a);

现在在我工作的主类中,我通过了 ParentClass b。所以我接受了 我的类 c = b.getMyClass;如果我理解正确的话,这是对 (x, y) -> x && y; 的引用。现在的问题是,如何获取参数的值和返回值,以便序列化它。此外,MyClass 并不总是 (x,y) -> x && y,它可以是任何东西,即

MyClass a = (x, y) -> x || y;
MyClass a = (x, y) -> x^y;
MyClass a = (x, y) -> true;

不允许我修改 MyClass 或 ParentClass。这就是为什么我试图获取传递的参数和返回值,以便我可以序列化这些参数并通过它们发送。

最佳答案

我怀疑您误解了 lambda 表达式的工作原理。您的问题暗示您希望创建您的 a 对象,然后将其序列化,并在此过程中以某种方式记录 xy 的值。我对你的理解正确吗?

如果是这样,那么这根本不是 lambda 的工作方式。它们不是通常意义上的包含状态的对象。而是将它们视为您可以传递的一些可执行代码,您可以随时将其应用于一组值(我怀疑我会因为过于简单的解释而在评论中受到重创!)。

您可以序列化 lambda,但在这种情况下,您序列化的是 lambda 表示的操作,而不是在任何给定调用中传递给它的值。

如果您希望MyClass 接口(interface)的实现是可序列化的,那么它需要扩展Serializable。它应该如下所示:

@FunctionalInterface
public interface MyClass extends Serializable {
boolean doSomething(boolean a, boolean b);
}

如果您不能修改 MyClass,那么您仍然可以将 MyClass 对象转换为 Serializable:

Serializable a = (Serializable & MyClass)(a, b) -> a || b;

或者,如果您使用的是 ParentClass 中的值:

Serializable a = (Serializable)b.getMyClass();

然后您应该能够序列化a

请记住,当您反序列化时,您需要转换回 MyClass 以便您可以使用它。它看起来像:

MyClass b = (Serializable & MyClass)objectInStream.readObject();
b.doSomething(true, false);

关于java - 获取lambda的参数和返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33702865/

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