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

getTrustManagersScala コンパイラ (2.9.2-1)が引数リストを持っていると解釈するかどうかはわかりません。

4

1 に答える 1

4

メソッド getTrustManagers は、空の引数リストで定義されているようです。つまり、

def getTrustManagers(): Array[TrustManager]

引数リストなしではなく

def getTrustManagers: Array[TrustManager]

あなたが持っているのはコーナーケースです.scalaは呼び出しサイトで空の引数リストを削除することに関して柔軟にしようとしますが、適用が同時に削除された場合(たとえば、引数のない適用メソッドがあった場合)はあいまいになる可能性があります、または getTrustManagers がオーバーロードされ、1 つの引数を持つバージョンがあった場合)。

getTrustManagers()(0)[0] の代わりに (0) を使用することを除いて、Java と同じように実行できます。

于 2012-06-15T20:07:20.477 に答える