Java HashMap存储不同的对象

时间:2014-10-03 13:34:11

标签: java hashmap

我遇到了HashMap的问题。对于任何其他泛型(LinkedList等),此问题都是相同的。让我们说我有2个classess:

A类:

public class A {
    public void aMethod() {
        System.out.println("A");
    }

B类,扩展A:

public class B extends A {
    public void bMethod() {
        System.out.println("B");
    }

现在在使用main方法的类中,我正在制作一个hashmap来存储这个2 classess的实例:

import java.util.HashMap;

public class TestList {
    public static void main(String[] args) {

        //I'm making 2 objects representing A and B class:

        A objA = new A();
        B objB = new B();

        // I'm making a HasMap storing A class objects, where I can
        // also store B objects, because B is subclass of A

        HashMap<String, A> myObjects = new HashMap<String, A>();
        myObjects.put("objA", objA);
        myObjects.put("objB", objB);

        // using a method from class A is working fine on objA: 
        myObjects.get("objA").aMethod();

        // but if I want to use a method from B class on objB
        // I need to cast:
        ((B) myObjects.get("objB")).bMethod();

    }
}

有没有办法在一个HashMap中存储来自不同classess的对象,哪个不需要强制转换才能使用其他(扩展)方法?

我想使用:

myObjects.get("objB")).bMethod();

没有施法。谢谢。

1 个答案:

答案 0 :(得分:3)

不,没有。通过用A参数化类型,你告诉编译器它唯一可以指望的是地图中的对象是A的实例。如果你在那里放置一个子类,它会接受它但是它可以&不知道那个特定的项目是B所以你总是要投射。