2011-12-08 7 views
8

Biorąc pod uwagę następujący obiekt Scala:Czy mogę uzyskać dostęp do val obiektu Scala bez nawiasów z Java?

object ScalaObject { 
    val NAME = "Name" 
} 

Wydaje się, że kompilator Scala generuje metody bez parametrów, aby uzyskać dostęp do pola NAME. Jednak przy próbie dostępu do tego pola z Jawy, wygląda na to jedyny sposób, aby uzyskać dostęp do tego pola jest jako metoda bez parametrów, takich jak:

System.out.println(ScalaObject$.MODULE$.NAME()); 

Czy istnieje sposób, aby namówić kompilator Scala, aby umożliwić Java dostępu val za oczekiwanego idiom Java jak:

System.out.println(ScalaObject$.MODULE$.NAME); 
+0

Czy to samo dzieje się z małymi literami? – ziggystar

+0

To nie jest oczekiwany idiom * Java *, ale jest to oczekiwany idiom * Scala *. Pod względem kodu bajtowego Scala (prawie?) Zawsze eksponuje pola jako metody pobierające o tej samej nazwie. –

+1

@AndrzejDoyle, nie jestem pewien co mówisz. W Javie oczekuje się dostępu do statycznych pól końcowych bez nawiasów, ponieważ jest to jedyny sposób, aby to zrobić. Sugeruje się, że w Scali oczekiwaną techniką jest użycie metod gettera. Niezależnie od tego, jaka jest preferowana technika Scali, nie wydaje się być istotna dla klienta Java API, który ma być zaimplementowany w Scali. –

Odpowiedz

7

Ściśle, odpowiedź brzmi nie, ponieważ scala nie generuje tylko pola, ale parę metod dostępu do niego. Jednak przypisanie do scala val z @scala.reflect.BeanProperty spowoduje utworzenie metod pobierania i ustawiania w stylu Java.

więc gdy nie będzie w stanie powiedzieć (w Twoim przypadku)

ScalaObject$.MODULE$.NAME 

Ty byłoby móc powiedzieć

ScalaObject$.MODULE$.getNAME() 

który byłby bardziej podobny idiom Java , tylko nie ten, na który liczyłeś.

N.B. Nie próbowałem @BeanProperty z taką samą wielką nazwą, więc nie jestem pewien, co by to faktycznie dało.

1

Nie, ponieważ w kodu bajtowego istnieją różne wskazówki dostęp do pola i wywołać metodę. Musisz wtedy załączyć Javac (i twój zakreślacz składni IDE).

+4

Sądzę, że OP spodziewa się, że niektóre adnotacje pozwolą uzyskać skalak do tworzenia pól Java, a nie sposób na uzyskanie dostępu do skompilowanych metod Java jako pól. – themel

+0

@phemel jest poprawny. –

Powiązane problemy