2014-12-16 3 views
6

Ich habe eine Objektdatenzugriff mit jOOQ geschrieben und es gibt eine recht komplexe Art Signatur:Gibt es eine Grenze für die Komplexität eines vom Lombok-Wert abzuleitenden Typs?

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

Ich versuchte es mit Lombok „val“

val result = create.... 

Dies funktioniert zu ersetzen, wenn ich laufen kompilieren/von eclipse-... Wenn ich innerhalb Gradle zu kompilieren versuchen, erhalte ich:

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>>> 

Kann jemand Sag mir, warum es in Gradle für einfachere Typen funktionieren würde, aber nicht für komplexere Typen? Ich habe an anderen Orten in demselben Projekt, das wie etwas aussehen:

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

und sie gut funktionieren, auch wenn sie mit Gradle zusammengestellt ... Bin ich etwas fehlt?

FYI: Lombok version = 1.14.8, Gradle Version 2.2.1

Ich habe lombok versucht == 1.14.6, Gradle Version 2.2.0

Ich habe auch mit sowohl Java 8 ausprobiert und 7 Java, sowohl OpenJDK und Oracle JDK

+0

Frage: Warum benötigen Sie vierzehn generische Typen? Dies ist ein Code-Geruch mehr als alles andere ... – Makoto

+2

Ich nehme an, Sie müssten das mit den JOOQ-Leuten und wie sie ihre Datenbank-Interaktionen machen ... Egal, ob es ein Code-Geruch ist, macht es wenig Sinn, dass es würde beim Kompilieren von Eclipse funktionieren und funktioniert nicht beim Kompilieren von Gradle. –

+0

@Makoto: Oft werden diese Typen nur hinter den Kulissen in der fließenden API von jOOQ verwendet und vom Compiler abgeleitet –

Antwort

1

Die Antwort ist ein Konflikt zwischen jOOQ DSL und lombok .. Der jOOQ DSL hat eine Methode "val", die einen Konflikt verursachen, wenn sie statisch importiert:

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

Wenn Sie diese "val" -Methode über einen statischen Import verwenden, wird die "val" -Implementierung von lombok durchbrochen. Das Entfernen des statischen Imports und die Verwendung von "DSL.val()" lösten das Problem für mich.

Weitere Informationen finden Sie unter: https://code.google.com/p/projectlombok/issues/detail?id=762

Verwandte Themen