我有一个类似下面的代码片段
List<? extends BaseClass> baseClassList = getBaseClassObjList();
BaseClass的子类还有其他公共方法。
是否可以在此列表的实际运行时对象上访问这些其他方法?
答案 0 :(得分:1)
不可能。您必须强制转换为该子类,然后调用该子类的方法。
class Animal{
//props
}
class Cat extends Animal{
public void sayMeow(){}
}
class Dog extends Animal{
public void bark(){}
}
List<? extends Animal> baseClassList = ...;
Animal animal = baseClassList.get(0)
//if we know animal object is of type Dog then straight away we can cast it
((Dog)animal).bark();
//if we are not sure if it is of Dog type then we have to check its type and if true then cast it and call its methods
if(animal instanceOf Dog){
((Dog)animal).bark();
}
即使你想使用反射,你必须首先找出它的实例类型,然后才能知道是否可以调用该方法。