如何迭代TreeMap并使用反射来获取子类名称?

时间:2014-06-04 07:09:50

标签: java reflection subclass treemap

假设我有以下抽象类和两个子类:

public abstract class Contact {
    private String name;

    public void showDetails() {
        System.out.println(name);
    }
}

public class Personal extends Contact {
    private String relationship;

    // @override
    public void showDetails() {
        System.out.println(name);
        System.out.println(relationship);
    }
}

public class Business extends Contact {
    private String company;

    // @override
    public void showDetails() {
        System.out.println(name);
        System.out.println(company);
    }
}

还假设我有一个TreeMap包含整数作为键,Business Objects或Personal对象作为值:

Map<Integer, Contact> masterList = new TreeMap<Integer, Contact>();

masterList.put(1, bContact1);
masterList.put(2, bContact2);
masterList.put(3, pContact1);
masterList.put(4, pContact2);

是否可以遍历TreeMap并使用反射来查看每个对象所属的子类,以便使用正确的重写方法?

例如,键1与bContact1配对,后者是Business对象。我想使用Business子类中的showDetails()方法来获取此特定值。

我可以很好地遍历地图,但我遇到了反射部分的问题。任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:1)

你不需要反思,你需要多态性。只需在对象上调用方法,Java将完成剩下的工作来调用正确的实现。

Contact contactRef = masterList.get(2);
contactRef.showDetails(); // overriden method invoked if it exists, inherited otherwise