0

我正在调用一个返回数组的方法:

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隐式提供方法调用。

更新:此代码中使用的类来自标准 Java 库:

import javax.net.ssl.TrustManagerFactory
import javax.net.ssl.X509TrustManager

我不知道 Scala 编译器 (2.9.2-1) 是否解释getTrustManagers为具有参数列表。

4

1 回答 1

4

您的方法 getTrustManagers 似乎是用一个空参数列表定义的,即

def getTrustManagers(): Array[TrustManager]

而不是没有参数列表

def getTrustManagers: Array[TrustManager]

你所拥有的是一个极端情况,scala 试图灵活地在调用站点删除空参数列表,但如果同时删除了 apply 可能会模棱两可(例如,如果有一个没有参数的 apply 方法,或者如果 getTrustManagers 被重载并且有一个带有一个参数的版本)。

你可以做getTrustManagers()(0)(​​与java中的相同,除了(0)而不是[0]。

于 2012-06-15T20:07:20.477 回答