如何访问列表的实际运行时对象的方法<! - ?扩展BaseClass - >?

时间:2016-01-09 08:10:54

标签: java generics inheritance

我有一个类似下面的代码片段

List<? extends BaseClass> baseClassList = getBaseClassObjList();

BaseClass的子类还有其他公共方法。

是否可以在此列表的实际运行时对象上访问这些其他方法?

1 个答案:

答案 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();
}

即使你想使用反射,你必须首先找出它的实例类型,然后才能知道是否可以调用该方法。