在Java中,如何从包含父类作为entryset的hashMap中获取子类属性? 公共类SuperVertex扩展了顶点{ int childAttr=1; } 公共类顶点{ int name=0; } 公开课考试{ SuperVertex sv=新的SuperVertex(); 顶点v=新顶点(); HashMap hmp=新的HashMap(); hmp.put(v,v); hmp.put(sv,sv); hmp.get(v.name//works hmp.get(sv.name//works hmp.get(sv).childAttr//不起作用 }

在Java中,如何从包含父类作为entryset的hashMap中获取子类属性? 公共类SuperVertex扩展了顶点{ int childAttr=1; } 公共类顶点{ int name=0; } 公开课考试{ SuperVertex sv=新的SuperVertex(); 顶点v=新顶点(); HashMap hmp=新的HashMap(); hmp.put(v,v); hmp.put(sv,sv); hmp.get(v.name//works hmp.get(sv.name//works hmp.get(sv).childAttr//不起作用 },java,Java,正如上面的代码所示,我无法访问childAttribute,因为我从HashMap获得了一个父类型对象。如何创建包含父对象和子对象类型的HashMap并访问子对象属性 public class SuperVertex extends Vertex{ int childAttr = 1; } public class Vertex { int name = 0; } public class Test { SuperVertex sv = new SuperVertex(

正如上面的代码所示,我无法访问childAttribute,因为我从HashMap获得了一个父类型对象。如何创建包含父对象和子对象类型的HashMap并访问子对象属性

public class SuperVertex extends Vertex{
    int childAttr = 1;
}

public class Vertex {
   int name = 0;
}

public class Test {
    SuperVertex sv = new SuperVertex();
    Vertex v = new Vertex();
    HashMap<Vertex, Vertex> hmp = new HashMap<Vertex, Vertex>();
    hmp.put(v,v);
    hmp.put(sv,sv);
    hmp.get(v).name //works
    hmp.get(sv).name //works
    hmp.get(sv).childAttr //doesn't work
}

转换为正确的类型可以修复该问题。多亏了@Miguel Gamboa和@nolexa。

是的,但是我不能将顶点类型的对象放入HashMap中,你需要检查是否
hmp.get(key)instanceof SuperVertex
,然后强制转换。你必须强制转换
((SuperVertex)hmp.get(sv)).childAttr
这与
HashMap
无关,它只是纯java类层次结构的东西。正如其他人在之前的评论中所建议的,您可以从一种类型转换到另一种类型。我明白了,谢谢您提供的信息。我不敢相信我错过了这么明显的事情。
(SuperVertex)hmp.get(sv).childAttr//works