Можно ли извлечь внутренние универсальные типы?
Представьте себе следующие классы:
interface Animal { }
class Bear implements Animal { }
class AnimalRule<ANIMAL extends Animal> { }
class BearRule extends AnimalRule<Bear> { }
Теперь я хочу написать тесты для этого кода, но я хочу иметь универсальную базуtest class.
Я могу объявить это так:
class AnimalRuleAltTest<ANIMAL extends Animal, RULE extends AnimalRule<ANIMAL>> {
RULE rule;
ANIMAL animal;
}
class BearRuleAltTest extends AnimalRuleAltTest<Bear, BearRule> { }
Однако я должен пропустить и Bear
, и BearRule
, что кажется излишним, поскольку компилятор наверняка знает, что BearRule
уже реализует AnimalRule<
Медведь >
.
Можно ли каким-то образом извлечь внутренний универсальный тип, если я предоставлю только класс правил?
Примерно так:
class AnimalRuleTest<RULE extends AnimalRule<ANIMAL>> {
RULE rule;
ANIMAL animal;
}
class BearRuleTest extends AnimalRuleTest<BearRule> { }
Обновление: Просто чтобы прояснить, я спрашиваю о извлечении внутренних классов / возможно ли это, а не о том, как это исправить.