我正在调用一个返回数组的方法:
val localTrustManagerFactory =
TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm)
val localTrustManager =
((localTrustManagerFactory.getTrustManagers).apply(0)).asInstanceOf[X509TrustManager]
如果我忽略.apply
调用,我会收到编译时错误:
val localTrustManager =
((localTrustManagerFactory.getTrustManagers)(0)).asInstanceOf[X509TrustManager]
error: too many arguments for method getTrustManagers: ()Array[javax.net.ssl.TrustManager]
有没有更好的方法来检索数组元素?我虽然编译器会隐式提供apply
方法调用。
UPDATE:此代码中使用的类来自标准Java库:
import javax.net.ssl.TrustManagerFactory
import javax.net.ssl.X509TrustManager
我不知道Scala编译器(2.9.2-1)是否将getTrustManagers
解释为具有参数列表。
答案 0 :(得分:4)
您的方法getTrustManagers似乎使用空参数列表定义,即
def getTrustManagers(): Array[TrustManager]
而不是没有参数列表
def getTrustManagers: Array[TrustManager]
你所拥有的是一个极端情况,scala试图灵活地在调用站点删除空参数列表,但如果同时删除了apply(例如,如果有一个apply方法),它可能是不明确的没有参数,或者如果getTrustManagers重载并且有一个带有一个参数的版本)。
你可以getTrustManagers()(0)
(与java相同,除了(0)而不是[0]。