gpt4 book ai didi

java - 从 Java 代码访问 Scala 对象

转载 作者:行者123 更新时间:2023-12-02 12:21:13 24 4
gpt4 key购买 nike

我正在尝试使用具有默认参数的 Scala 类:

object SimpleCredStashClient {

def apply(kms: AWSKMSClient, dynamo: AmazonDynamoDBClient, aes: AESEncryption = DefaultAESEncryption)
...
}

当我尝试从 Java 实例化此类的实例时,出现错误:

Error:(489, 43) java: cannot find symbol  symbol:   method SimpleCredStashClient(com.amazonaws.services.kms.AWSKMSClient,com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient)  location: class com.engineersgate.build.util.CredentialsUtil

DefaultAESEncryption 是一个 Scala 对象。如何在 Java 中访问 Scala 对象?

最佳答案

默认参数成为 <meth>$default$<idx>() 形式的合成方法。此外,对象的实例A可以在 A$.MODULE$ 找到(如果 A 是顶级 object ),或在 outer.A() 处(如果 A 被定义为类似 class O { object A } )。因此,有两种方法可以做到这一点:

直接使用对象:

SimpleCredStashClient.apply(
kms,
dynamo,
DefaultAESEncryption$.MODULE$
);

默认参数:

SimpleCredStashClient.apply(
kms,
dynamo,
SimpleCredStashClient.apply$default$3()
);

第一个看起来当然更好,但如果默认参数发生变化,您也必须更新此代码。在第二个中,参数是默认参数,并且只有当参数不再具有默认值或更改其索引时才会中断。 Scala在编译时使用第二种方法。

关于java - 从 Java 代码访问 Scala 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45762748/

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