gpt4 book ai didi

scala - 自动将 JavaBeans 包装/转换为 case 类

转载 作者:行者123 更新时间:2023-12-01 11:33:48 26 4
gpt4 key购买 nike

我们使用 Kryo 在 Scala 应用程序和 Java 应用程序之间进行通信。由于必须从 Java 中使用类定义(并且我们不想将 Scala 库作为依赖项包含在 Java 应用程序中),因此我们使用 JavaBeans 来定义传输对象。

但是,在 Scala 中直接使用 JavaBeans 有点麻烦。没有模式匹配,必须使用 new 等等。我们现在正在做的是在 Scala 端的单独对象中定义提取器和应用方法,以便更好地使用这些类。

由于我们需要的大部分是样板文件,我们想知道是否有一种方法可以自动执行此操作。例如,我们有这个 JavaBean(大约有 20 多种不同的消息类型):

public class HandshakeRequest extends Request {
private String gatewayId;
private String requestId;
private Date timestamp = new Date();

public HandshakeRequest(String gatewayId, String requestId) {
this.gatewayId = gatewayId;
this.requestId = requestId;
}

public String getGatewayId() { return gatewayId; }
public String getRequestId() { return requestId; }
public Date getTimestamp() { return timestamp; }
private HandshakeRequest() { /* For Kryo */ }
}

这是我们用来桥接到 Scala 的对象的示例:
object Handshake {
def unapply(msg: HandshakeRequest): Option[ (DateTime, String, String) ] = {
(
new DateTime(msg.getTimestamp.getTime),
msg.getRequestId,
msg.getGatewayId
).some
}

def apply(gatewayId: String, requestId: String) = new HandshakeRequest(gatewayId, requestId)
}

由于我们所有的对象都有时间戳,它也是样板的一部分。我们想要某种方式(也许是一个宏?)来自动生成 unapply 和 apply 方法(理想情况下是整个对象本身)。

有谁知道一种简单的方法来实现这一目标?

最佳答案

由于没有答案,我想出了这个:https://github.com/yetu/scala-beanutils .

关于scala - 自动将 JavaBeans 包装/转换为 case 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29678937/

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