Java 如何遍历树映射并使用反射来获取子类名称?
假设我有以下抽象类和两个子类:Java 如何遍历树映射并使用反射来获取子类名称?,java,reflection,subclass,treemap,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
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);
}
}
还假设我有一个树形图,其中包含整数作为键,业务对象或个人对象作为值:
Map<Integer, Contact> masterList = new TreeMap<Integer, Contact>();
masterList.put(1, bContact1);
masterList.put(2, bContact2);
masterList.put(3, pContact1);
masterList.put(4, pContact2);
Map masterList=newtreemap();
主列表。put(1,b联系人1);
主列表。put(2,b联系人2);
主列表。put(3,pContact1);
主列表。put(4,pContact2);
为了使用正确的覆盖方法,是否可以迭代树映射并使用反射来查看每个对象所属的子类
例如,键1与业务对象bContact1配对。我想使用业务子类中的showDetails()方法来实现这个特定的值
我可以很好地遍历贴图,但是反射部分有问题。感谢您的帮助 你不需要反思,你需要多态性。只需调用对象上的方法,Java将执行其余操作来调用适当的实现
Contact contactRef = masterList.get(2);
contactRef.showDetails(); // overriden method invoked if it exists, inherited otherwise
非常感谢。我有把事情复杂化的习惯。编辑:即使Contact是一个抽象类,我也可以这样做吗?@NojoRu是的。你应该仔细阅读遗传和多态性。这是它们的特性之一。