假设我有一个抽象类:
public abstract class Trainer<T extends Animal>{
...
}
我希望所有的子班都有一个通用的方法来检查给定动物的训练师的训练状态。所以我在我的培训师定义中有:
public abstract class Trainer<T extends Animal>{
public double getStatus(Animal a){
...
}
}
这样任何人都可以查询培训师,无论其具体类型如何。但是,为了让各个培训师负责报告他们自己的状态,我要求各个培训师实现一个internalGetStatus
方法,然后我希望我的getStatus
方法调用该方法。所以我目前正在做的是:
public abstract class Trainer<T extends Animal>{
protected abstract internalGetStatus(T theAnimal);
public double getStatus(Animal a){
return internalGetStatus((T) a);
}
}
当然,问题是return internalGetStatus((T) a);
涉及未经检查的类型转换,它会引发我想避免的警告。
有没有办法做到这一点?
由于我无法控制的一些设计限制,当查询特定动物的状态时,它作为父类 Animal 的对象提供,而不是为其创建训练器的特定动物类型。