在Scala中检索数组元素

时间:2012-06-15 19:55:38

标签: arrays scala indexing

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

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解释为具有参数列表。

1 个答案:

答案 0 :(得分:4)

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

def getTrustManagers(): Array[TrustManager]

而不是没有参数列表

def getTrustManagers: Array[TrustManager]

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

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