2011-10-05 23 views
11

. W jaki sposób można uzyskać dostęp do metody przy użyciu aliasu typu? type Cal = java.util.Calendar Próbowałem następujących w Scala REPL:Jak uzyskać dostęp do statycznej metody języka Java ze Scala, biorąc pod uwagę alias typu dla tej klasy, który znajduje się w

scala> type Cal = java.util.Calendar 
defined type alias Cal 
scala> Cal.getInstance 
<console>:8: error: not found: value Cal 
      Cal.getInstance 
     ^
scala> val Cal = java.util.Calendar 
<console>:7: error: object Calendar is not a value 
    val Cal = java.util.Calendar 
        ^

Czy import java.util.{Calendar => Cal} następnie import Cal._ naprawdę moim najlepszym?

+2

W trosce o spójność i do tego, aby alias typu w pełni zastąpił typ, myślę, że Scala powinna również udostępnić za jego pośrednictwem metody statyczne. –

Odpowiedz

12

Nie możesz.

Tak, import java.util.{Calendar => Cal} jest naprawdę najlepszym wyborem.

Koncepcyjnie, Scala object członkowie są podobni do statycznych członków klas Java. Może to zasugerować, że następujące czynności będą działały, ale nie jest tak, ponieważ w rzeczywistości nie istnieją żadne obiekty singleton dostępne dla klas Java.

scala> val Cal = java.util.Calendar 
<console>:13: error: object Calendar is not a value 
     val Cal = java.util.Calendar 
         ^
+0

Sądzę, że można również po prostu owijać całość ręcznie w "obiekcie Cal". Można argumentować, jakie rozwiązanie to ** najlepszy zakład **. – agilesteel