2011-12-08 14 views
7

Se volevo che il mio progetto Scala fosse "compatibile" con Java, cioè è pratico chiamare l'API Scala dal codice Java (in modo che anche i programmatori non scalatori possano contribuire), sarebbe possibile utilizzare Project Lombok in il codice Java? O i due non vanno d'accordo?Project Lombok funziona bene con Scala?

Mi piacerebbe sviluppare in Eclipse con l'IDE Scala.

EDIT: Quello che ho veramente dire è: sarà la Scala editor di in Eclipse vedere il codice generato da Lombok, o semplicemente il codice Java davvero digitato?

+1

Per quanto riguarda la modifica e la mia completa mancanza di conoscenza su Eclipse, ciò che funzionerà ovviamente è quando si utilizza il codice Java compilato come libreria. Quindi la tua domanda è interessante solo per i progetti misti, non mescolando le librerie. – ziggystar

risposta

9

Non sono sicuro di cosa si stia chiedendo, dal momento che Scala e Java sono interoperabili a livello di codice byte, non interessa da dove provenga il bytecode. Quindi credo che il tuo codice Java che usa l'annotazione di Lombok possa ancora essere chiamato dal programma Scala.

E se stai chiedendo se quelle annotazioni fornite da Lombok potrebbero essere usate nel codice Scala, non vedo perché la maggior parte di queste funzioni sia fornita da Scala itsef.

Ad esempio, una classe con @Data potrebbe essere un case class a Scala.

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

E si potrebbe accedervi in ​​codice Java proprio come una classe normale.

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

E Data avranno tutti meravigliosi toString, equals, hashcode .... ecc.

+0

+1 Non ci stavo pensando in questo modo, ma risponde alla metà della mia domanda. Specificherò quello che voglio modificando la domanda. –

+0

In realtà, avrei dovuto pensarci prima di chiedere. Domanda brutta –

9

La parte dell'editor di scala "vedrà" il codice generato bene.

La maggior parte di ciò che lombok fa segue alcune specifiche o altre, come la scala. Dove Lombok devia è canEqual e uguale a implementazioni, che tra l'altro è l'esatto stessa cosa Scala genera per classi case IIRC, quindi, anche che sia compatibile :)

NOTA BENE: Sono un collaboratore di base per proiettare Lombok.

+0

Hmm, attualmente sto riscontrando problemi con il mio codice scala-test che non trova il mio costruttore generato da @RequiredArgsConstructor. Mi chiedo se questo è un problema nel mio setup o un bug. – eduardohl

+1

Appena risolto, è stato un problema con Eclipse compilare codice Scala prima del codice Java, per cambiarlo: Preferenze >> Scala >> Compilatore >> Scheda BuildManager >> Cambia compileOrder da Misto a JavaThenScala – eduardohl

+0

@rzwitserloot In situazioni in cui caso Scala le classi hanno annotazioni '@ Data' su di esse, consiglieresti di usare Javac su Eclipsec per la compilazione di tale codice? –

Problemi correlati