我正在尝试使用具有默认参数的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对象?
答案 0 :(得分:1)
默认参数成为R=301
形式的合成方法。此外,对象<meth>$default$<idx>()
的实例可以在A
(如果A$.MODULE$
是顶级A
)或object
(如果{{ 1}}被定义为outer.A()
)。因此,有两种方法可以做到这一点:
直接使用对象:
A
默认参数:
class O { object A }
第一个肯定看起来更好,但是如果默认参数发生变化,你也必须更新这个代码。在第二个参数中,参数是默认参数,并且只有在参数停止具有默认值或更改其索引时才会中断。 Scala在编译时使用第二种方法。