Java HashMap 存储不同的对象

标签 java hashmap

<分区>

我对 HashMap 有疑问。这个问题对于任何其他泛型(LinkedList 等)都是一样的。假设我有 2 个类:

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 个类的实例:

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 中存储来自不同类的对象,而不需要强制转换才能使用其他(扩展)方法?

我想使用:

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

没有类型转换。谢谢。

最佳答案

不,没有。通过使用 A 参数化类型,您已经告诉编译器它唯一可以依赖的是映射中的对象是 A 的实例。如果您将子类放在那里,它会接受它但它不能知道那个特定的项目是 B,所以你总是必须施放。

关于Java HashMap 存储不同的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26179960/

相关文章:

java - 从随机 HashMap 递减值

java - 如何构造动态类型的哈希表

java - 将值插入 HashMap 无法正常工作

javascript - 我正在尝试将值从数据库传递到js。但我收到了升压错误?

Java 工作目录

Java ant 脚本不显示警告

java - Hibernate HashMap 映射

C++ 并发关联容器?

java - 如果这就是您要在 main 方法中执行的全部操作,那么在 main 方法中启动线程是否多余?

java - strut 中的组合框