2012-06-15 5 views
0

Я вызываю метод, который возвращает массив:Извлечение элемента массива в Scala

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] 

Is есть ли лучший способ получить элемент массива? Я, однако, что компилятор будет предлагать вызов метода apply неявно.

UPDATE: Классы, используемые в этом коде из стандартной библиотеки Java:

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

Я не знаю, если компилятор Scala (2.9.2-1) интерпретирует getTrustManagers как имеющий аргумент список или нет.

+0

Я не могу воспроизвести это. Как определено 'getTrustManagers' и какой версии, кроме лестницу вы используете? Это действительно похоже на ошибку компилятора. – drexin

ответ

4

Ваш метод getTrustManagers, как представляется, определяется с пустым списком аргументов, то есть

def getTrustManagers(): Array[TrustManager] 

, а не без списка аргументов

def getTrustManagers: Array[TrustManager] 

что у вас есть угол случай, Скала пытается быть гибким, чтобы удалить пустой список аргументов на сайте вызова, но он может быть неоднозначным, если приложение было удалено одновременно (например, если был применен метод без аргумента или если getTrustManagers были перегружены и имели версию с один аргумент).

Вы можете сделать getTrustManagers()(0) (такой же, как и в Java, для (0) вместо [0].

Смежные вопросы