2008-09-25 17 views
11
'yi genişletiyor

Aşağıdaki C# genel yapısına benzer bir genel kısıtlama tanımlamak mümkün mü?Java'da sınıftaki çift jenerik kısıtlaması: ConcreteClass & I

class Class1<I extends Interface1, T extends I & Class2> 

Ama derleyici "Sınıf2" kısmı hakkında şikayet:

class Class1<I,T> where I : Interface1, Class2 : I 

Ben böyle yapmaya çalışıyorum diğer sınırlar tarafından takip edilemez Tipi parametresi.

+0

'extands'? Uzatmalar mı demek istediniz? - Ayrıca C# çizgisi T türünde herhangi bir kısıtlama koymaz, belki de bir hata yaptınız? – BrainSlugs83

+0

Bu bir yazım hatası ve bu Java. – axk

cevap

4

Java kodunu çözme görebilirsiniz basit yolu Sınıf2 bir arayüz yapmaktır (o Interface1uzanır daha sen Ben ilgili sınıfta daha fazla bir şey bilmez).

Bir tür parametresini birden fazla sınıf veya tür parametresi genişletmek için kısıtlayamazsınız. Ayrıca, burada süper kullanamazsın.

5

Bu kod ince buraya derler:

interface Interface1 {} 

class Class2 {} 

class Class1<I extends Interface1, T extends Class2 & Interface1> {} 

Neden Gereklidir zaten sadece Interface1 varsayalım zaman yanında yazın?

+3

Her iki parametre için de somut sınıflar belirttiğinizde "T Class2 & I'yi genişletiyor" "T Class2 & Interface1'i genişletiyor" – axk