Приручение средства проверки типа в Дженериках Java

Я думал, что понял Дженерики вполне прилично, но по-видимому я не сделал.

Вот тестовый сценарий проблемы:

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?

6
задан Kohsuke Kawaguchi 10 August 2010 в 01:14
поделиться