2011-12-08 15 views
7

Jeśli chciałbym, aby mój projekt Scala był "kompatybilny" z Javą, to jest praktyczne wywoływanie API Scala z kodu Java (aby programiści spoza Scala również mogli wnieść swój wkład), czy byłoby możliwe użycie Project Lombok w kod Java? Czy może dwoje z nich nie dogaduje się dobrze?Czy projekt Lombok działa dobrze w Scali?

Chciałbym rozwijać w Eclipse z Scala IDE.

EDYCJA: Co naprawdę miał na myśli: czy Scala edytor w Eclipse zobacz kod generowany przez Lombok, lub po prostu kod Java naprawdę wpisane?

+1

Jeśli chodzi o edycję i mój kompletny brak wiedzy na temat Eclipse - to, co będzie działać oczywiście, to kiedy używasz skompilowanego kodu Java jako biblioteki. Twoje pytanie jest interesujące tylko w przypadku projektów mieszanych, a nie w mieszaniu bibliotek. – ziggystar

Odpowiedz

9

Nie jestem pewien, o co pytasz, ponieważ Scala i Java są współdziałanie w poziomie bajtode, nie obchodzi go skąd pochodzi kod bajtowy. Wierzę, że twój kod Java, który używa adnotacji Lombok, nadal może być wywołany z programu Scala.

A jeśli pytasz, czy te adnotacje, które daje Lombok, mogą być użyte w kodzie Scala, nie widzę sensu, ponieważ większość tych funkcji jest dostarczana przez Scala itsef. Na przykład klasa o numerze @Data może być case class w Scali.

case class Data(name: String, value: Int) 

I można uzyskać do niego dostęp w kodzie Java, tak jak normalna klasa.

Data d1 = new Data("someData", 1); // Using constructor 
Data d2 = Data.apply("someData", 1); // Or using factory 

I Data będą miały wszystkie wspaniałe toString, equals, hashcode .... itd.

+0

+1 Nie myślałem o tym w ten sposób, ale to odpowiada na połowę mojego pytania. Określę, co chcę, edytując pytanie. –

+0

Właściwie powinienem był o tym pomyśleć zanim zapytam. Złe pytanie. –

9

Część edytora scala "zobaczy" wygenerowany kod po prostu dobrze.

Większość tego, co robi lombok, jest zgodne ze specyfikacją lub inną, tak samo jak scala. Gdzie Lombok odbiega to canEqual i wynosi implementacje, które nawiasem mówiąc to jest dokładny samo scala generuje dla klas przypadków IIRC, więc nawet, że jest kompatybilny :)

OŚWIADCZENIE: Jestem współpracownikiem rdzeń do projektu Lombok.

+0

Hmm, aktualnie mam problemy z moim kodem testu scala, nie znajdując mojego konstruktora wygenerowanego przez @RequiredArgsConstructor. Zastanawiasz się, czy to problem w mojej konfiguracji, czy błąd. – eduardohl

+1

Po prostu rozwiązany, problem polegał na tym, że Eclipse kompilował kod Scala przed kodem Java, aby go zmienić: Preferencje >> Scala >> Kompilator >> karta BuildManager >> Zmień compileOrder z Mixed na JavaThenScala – eduardohl

+0

@rzwitserloot W sytuacjach, w których sprawa Scala klasy mają na nich adnotację '@ Data', czy poleciłbyś używać Javac przez Eclipsec do kompilacji takiego kodu? –