2013-06-07 28 views
9

Genel bir Dao arabirimi yazıyorum ve bazı sorunlarla karşılaştım.Java - jenerik parametre çözümlenemiyor

aşağıdaki jenerik Varlık arayüzünü Yani jenerik parametre varlığın kimliği temsil etmesi gereken

public interface Entity<T> { 

    T getId(); 

    //more code 
} 

var. Ve şimdi yerine türgüvenli olmadığı

T find(Object id) 

aramak zorunda

T find(E id) 

arama yapabilmek için bu

public interface Dao<T extends Entity<E>> { 

    //more code 

    T find(E id); 

} 

gibi genel bir Dao initerface yazmak istiyorum.

Maalesef derleyici Aranızda orada bu soruna bir çözüm mi, yoksa Java yapmak imkansız olup olmadığını biliyor musunuz

Dao<T extends Entity<E>> 

yılında E çözmek mümkün görünmüyor?

cevap

10

Sen de parametre olarak birincil anahtar geçmek zorunda:

public interface Dao<K, T extends Entity<K>> 

Yukarıdaki imza artırabilir böylece pk genellikle, seri hale getirilebilir:

public interface Dao<K extends Serializable, T extends Entity<K>> 

Ve:

public interface Entity<K extends Serializable> 

O zaman:

+0

Ick! 'Serializable' :(Geriye dönük uyumluluk haricinde herkes tarafından uygulanan arayüzü görmediğimi utanç veren pek çok serileştirme çerçevesi var ... – fge

+0

Anladım, ipuçları için teşekkürler! – SmokeIT

+0

@fge Bunu hiç duymadım point ... Belgeleriniz/makaleleriniz var mı? – sp00m

İlgili konular