2014-12-16 9 views
6

Ho un Data Access Object scritto utilizzando jOOQ e restituisce un tipo di firma piuttosto complessa:Esiste un limite alla complessità di un tipo da dedurre dalla val di Lombok?

Map<Record, Result<Record14<String, Integer, String, String, String, String, String, String, Integer, String, Boolean, Boolean, Integer, Boolean>>> result = create.... 

ho provato a sostituirlo con "val" di Lombok

val result = create.... 

Questo funziona quando corro/compilazione da Eclipse ... Quando provo a compilare entro Gradle, ottengo:

UpdatesDAO.java:307: error: incompatible types 
      .fetchGroups(key); 
         ^
    required: val 
    found: Map<Record,Result<Record14<String,Integer,String,String,String,String,String,String,Integer,String,Boolean,Boolean,Integer,Boolean>>> 

Può chiunque dimmi perché avrebbe funzionato in Gradle per tipi più semplici, ma non per tipi più complessi? Ho altri posti in questo stesso progetto che sembrano qualcosa di simile:

val records = dao.getDatastoreById(id); // Returns a type of List<Datastore> 

e funzionano bene, anche quando si compila con Gradle ... Mi sto perdendo qualcosa?

FYI: versione Lombok = 1.14.8, versione 2.2.1 Gradle

ho cercato Lombok == 1.14.6, versione 2.2.0 Gradle

Ho anche provato sia con Java 8 e Java 7, sia OpenJDK e Oracle JDK

+0

Domanda: perché avete bisogno di quattordici tipi generici? Questo è un odore di codice più di ogni altra cosa ... – Makoto

+2

Suppongo che tu dovresti parlarne con le persone di jOOQ e come fanno le loro interazioni con il database ... Indipendentemente dal fatto che si tratti di un odore di codice, non ha molto senso funzionerebbe durante la compilazione da Eclipse e non funzionerà durante la compilazione da Gradle. –

+0

@Makoto: Spesso questi tipi vengono utilizzati solo dietro le quinte nell'API fluente di jOOQ e vengono dedotti dal compilatore –

risposta

1

La risposta è un conflitto tra DSL e Lombok di jOOQ .. Il jOOQ DSL ha un metodo "val" che causerà un conflitto quando vengono importati in modo statico:

import static org.jooq.impl.DSL.val; 

Se si utilizza il metodo "val" tramite un'importazione statica, si interromperà l'implementazione "val" di lombok. La rimozione dell'importazione statica e l'uso di "DSL.val()" hanno invece risolto il problema.

Maggiori informazioni sono disponibili presso: https://code.google.com/p/projectlombok/issues/detail?id=762

Problemi correlati