Я думал, что понял Дженерики вполне прилично, но по-видимому я не сделал.
Вот тестовый сценарий проблемы:
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) {}
}
Компилятор не позволяет test1 метод выше, говоря, что "Задание" не в его границах типа. Я вид вида понимаю это--- Job
поскольку необработанный тип не расширяется Job<Job,Run>
, следовательно ошибка. Напротив, test3 работы.
Теперь, вопрос, как я делаю эту работу? Я попробовал № 2, но это не работает также. Проблема, которую я предполагаю, является действительно похожей с № 1--- Job<Job,Run>
не в границах потому что его аргумент типа Job
необработанный тип.
Кто-либо знает, как сделать средство проверки типа счастливым кроме обращения к необработанному типу? Или разве это просто не достижимо в системе типов Java?