我有一个调用其他几个方法的方法,这些方法有不同的返回类型,就像:
public void caller() {
String methodName = "call2";
Method[] methods = Called.class.getDeclaredMethods();
for (Method method : methods) {
if (method.getName().equals(methodName)) {
Object obj = method.invoke(null, null);
// then I want to cast obj to its real type, in called class the
// method may return a List or Map an so on
}
}
}
例如方法a
返回一个植物,方法b
返回一个动物,方法c
返回一块石头,我需要将其转换为真实类型,以便我可以使用唯一
答案 0 :(得分:1)
我假设您的示例Dog
,Cat
是Animal
类的孩子。
class Animal{}
class Dog extends Animal{}
class Cat extends Animal{}
您可以使用泛型将任何children
Animal
个对象投射到Animal
:
public <T extends Animal> Animal castToAnimal(T childAnimal) {
Animal animal = null;
if (childAnimal != null) {
animal = Animal.class.cast(childAnimal);
// Or use
// animal = (Animal) childAnimal;
}
return animal;
}
如定义castToAnimal
方法仅接受children
类的Animal
作为参数,以便您可以避免instanceof
检查。
答案 1 :(得分:0)
如果您打算将它用于诸如
之类的东西,您只需将其强制转换为真实类型if (obj instanceof Map) {
Map map = (Map) obj;
System.out.println("Size: "+map.size();
} else if (obj instanceof Collection) {
Collection coll = (Collection) obj;
System.out.println("Size: " + coll.size();
} else if ....
注意:您需要知道您可能感兴趣的所有类型,至少是广义的。