2014-12-16 15 views
6

Bir veri erişim nesnesi jOOQ kullanılarak yazılmıştır var ve oldukça karmaşık tür imzayı döndürür: Ben çalıştırdığınızdaLombok'un vali tarafından çıkarılacak bir türün karmaşıklığı için bir sınır var mı?

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

Ben Lombok yönettiği "val" ile değiştirmek çalıştı

val result = create.... 

Bu işleri/Ben Gradle içinde derlemeye çalıştığınızda Eclipse ... dan derlemek, alıyorum:

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

herkes Can Daha basit tipler için Gradle'da neden çalışacağını söyle, ancak daha karmaşık tipler için değil? Ben şuna benzer bu aynı projede başka yerler var:

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

ve Gradle ile derlenmiş bile ... Ben bir şey eksik, sadece iyi çalışır? Bilginize

: Lombok version = 1.14.8, Gradle sürüm 2.2.1

Ben lombok == 1.14.6 denedi, Gradle sürüm 2.2.0

Ben de Java 8 ve ikisi ile çalıştık Java 7, hem OpenJDK ve Oracle JDK

+0

Soru: Neden ondört jenerik türlerini gerektirir mi? Bu bir kod her şeyden daha çok kokuyor ... – Makoto

+2

Bunu jOOQ insanlarıyla ve veritabanı etkileşimlerini nasıl yapmaları gerektiğine inanıyorum ... Bir kod kokusu olsun olmasın, bu biraz mantıklı. Eclipse derlerken çalışacak ve Gradle'dan derleme sırasında çalışmaz .. –

+0

@Makoto: Çoğu zaman, bu türler yalnızca jOOQ'nun akıcı API'sindeki sahnelerin arkasında kullanılır ve derleyici tarafından çıkarılır. –

cevap

1

cevap jOOQ en DSL ve lombok arasında bir çelişki olduğunu .. jOOQ DSL vardır statik ithal zaman bir çatışma neden olacaktır yöntemidir "val":

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

Bu "val" yöntemini statik bir aktarım yoluyla kullanıyorsanız, lombok'un "val" uygulamasına son verir. Bu statik içe aktarma işleminin kaldırılması ve bunun yerine "DSL.val()" kullanılması sorunu benim için çözdü.

Daha fazla bilgiye: https://code.google.com/p/projectlombok/issues/detail?id=762

İlgili konular