从hashmap中检索后如何指定此对象属于哪个子类?

时间:2010-05-27 12:12:45

标签: java hashmap

我有一个名为Course的父类,以及两个子类PostgradCourse和UndergradCourse。 我有一个hashmap HashMap课程;我将所有postgradCourse和undergradCourse对象存储在hashmap中。

我想使用密钥从hashmap中检索undergradCourse对象。 课程课程= courses.get(courseCode); 然后我想在UndergradCourse类中调用一个方法,setUnits()方法 course.setUnits(); 但是编译器说找不到符号方法setUnit()

我很确定问题是编译器在Course类中寻找方法setUnit()而不是UndergradCourse类

我做了这个,但它不起作用 UndergradCourse course = courses.get(courseCode); 导致类型不兼容

那么如何从hashmap中检索undergradCourse对象作为undergradCourse对象而不是课程对象? 所以我可以在子类中调用一个方法

提前致谢

2 个答案:

答案 0 :(得分:1)

地图存储两种不同类型的课程。当您从地图中检索课程时,您不知道您检索过哪种课程。

要解决这个问题,如果您使用C ++进行编程,至少有三种方法可以解决这个问题:

  1. 有两张不同的地图:一张本科课程地图,另一张研究生课程地图(而非一张基础课程图)。
  2. 当您从单个地图获得基础课程时,将对象(使用static_cast或dynamic_cast)转换为您知道/希望它的子类类型
  3. 在抽象基础课程中将setUnit方法声明为虚拟(也许是纯虚拟),并在子类中给它两个不同的实现:然后因为它在基础课程中声明,你可以在基础课程对象上调用它从地图中检索。

答案 1 :(得分:0)

假设您使用Java编程,您可以使用 instanceof 运算符来确定对象是否属于某种类型。

Course course = courses.get(courseCode)
if(course instanceof UndergradCourse)
{
    UndergradCourse undergradCourse = (UndergradCourse)course;
    // do you stuff with the undergrad course
}

注意:取决于对象的实际类型是打破面向对象的编程。它不被认为是好的风格。