Generics'i çok iyi anladığımı sanıyordum ama görünüşe göre yapmadım.Java Generics'te yazım denetleyicisini tamama
import java.util.ArrayList;
class Job<J extends Job<J,R>, R extends Run<J,R>> {}
class Run<J extends Job<J,R>, R extends Run<J,R>> {}
class Job2 extends Job<Job2,Run2> {}
class Run2 extends Run<Job2,Run2> {}
class RunList<J extends Job<J,R>, R extends Run<J,R>> extends ArrayList<R> {}
class Foo {
// #1 problem
public void test1(RunList<Job,Run> why) {}
// #2 this doesn't work either
public void test2(RunList<Job<Job,Run>,Run<Job,Run>> why) {}
// #3 this works
public void test3(RunList<Job2,Run2> why) {}
}
derleyici "İş" kendi türü sınırları içinde olmadığını söyleyerek, yukarıda test1 yöntemini izin vermez: Burada
sorunun test niteliği taşıyor. Ben bir tür olarakolarak anlayamıyorum sorta,Job<Job,Run>
, dolayısıyla hata uzatmaz. Buna karşılık test3 çalışır.
Şimdi, soru şu, bu işi nasıl yapacağım? # 2 denedim ama bu da işe yaramıyor. Sanırım sorun gerçekten 1 # 0 --- Job<Job,Run>
ile benzerdir, çünkü tür argümanı Job
ham bir türdür.
Ham tipi kullanmaktan başka, tip denetleyiciyi nasıl mutlu edeceğini bilen var mı? Yoksa Java tipi sistemde elde edilemez mi? Belki
Eğer çalışmak istediğinize herhangi bir ek bilgi verebilir misiniz? Bir çözümünüz var gibi görünüyor - çalışmak istediğiniz hangisi, ve neden? – mlschechter
# 3'ün anlamsal olarak farklı olduğunu ve bir çözüm olmadığını unutmayın; bu bir çözüm değildir. # 3 etkin bir şekilde ArrayList'u verir ve örneğin oradaki düz Run nesnesini ekleyemezsiniz. RunList'i düz İşler ve Çalışmalar ile istiyorum, böylece örneğin düz bir Run nesnesi koyabilirim. # 2, eğer işe yaradıysa, benzer bir şey elde ederdi. –