是否可以提取内部泛型类型?
想象一下以下课程:
interface Animal { }
class Bear implements Animal { }
class AnimalRule<ANIMAL extends Animal> { }
class BearRule extends AnimalRule<Bear> { }
现在,我想为此代码编写测试,但是我想拥有一个通用的基础测试类。
我可以这样声明:
class AnimalRuleAltTest<ANIMAL extends Animal, RULE extends AnimalRule<ANIMAL>> {
RULE rule;
ANIMAL animal;
}
class BearRuleAltTest extends AnimalRuleAltTest<Bear, BearRule> { }
但是我必须同时传递Bear
和BearRule
,这似乎是多余的,因为编译器肯定知道BearRule
已经实现了AnimalRule<
Bear { {1}}。
如果我仅提供规则类,是否有可能提取内部泛型类型?
类似这样的东西:
>
更新:为清楚起见,我问的是提取内部类/是否可以,而不是如何“修复”它。
答案 0 :(得分:0)
尝试一下:
class AnimalRuleAltTest<ANIMAL extends Animal> {
AnimalRule<ANIMAL> rule;
ANIMAL animal;
}
class BearRuleAltTest extends AnimalRuleAltTest<Bear> { }
此外,将RULE
中AnimalRuleAltTest
的所有AnimalRule<ANIMAL>
替换为 setTimeout(function(){
if (document.querySelector(".one-rolled-popup").style.display == "block";) {
document.querySelector(".one-rolled-popup").style.display= "none";
} else {
document.querySelector(".one-rolled-popup").style.display= "none";
}
}, 3000);
。
答案 1 :(得分:0)
此代码段遵循与您完全相同的结构,从BearRuleTest
到Bear
。
public static void main(String...strings) throws Exception {
final ParameterizedType bearRuleTestGenericSuperclass =
(ParameterizedType) BearRuleTest.class.getGenericSuperclass();
final Type type = bearRuleTestGenericSuperclass.getActualTypeArguments()[0];
final ParameterizedType animalRuleGenericSuperclass =
(ParameterizedType) Class.forName(type.getTypeName()).getGenericSuperclass();
System.out.println(
animalRuleGenericSuperclass.getActualTypeArguments()[0]
);
}
编辑:
AnimalRuleTest
和AnimalRule
。BearRule
。BearRule
类,然后获取其genericSuperclass
,它是带有通用参数的AnimalRule
。Bear
。