使用HashMap存储实例变量?

时间:2011-10-21 23:31:29

标签: java hashmap

我想创建一个基类,我的程序中的所有类都将扩展。我想做的一件事是找到一种统一的方法将所有实例变量存储在对象中。

我想到的是使用HashMap存储对象的键/值对,然后通过get和set方法公开这些值。

到目前为止,我所拥有的代码如下:

package ocaff;

import java.util.HashMap;

public class OcaffObject {

    private HashMap<String, Object> data;

    public OcaffObject() {
        this.data = new HashMap<String, Object>();
    }

    public Object get(String value) {
        return this.data.get(value);
    }

    public void set(String key, Object value) {
        this.data.put(key, value);
    }

}

虽然功能上有效,但我很好奇这个实现是否存在任何实际问题,或者有更好的方法可以做到这一点?

在我的日常工作中,我是一名PHP程序员,我的目标是模仿我在Java中用于PHP的功能。

2 个答案:

答案 0 :(得分:14)

我不认为这是处理你的意思的好方法。 从我的观点来看,java中的编程与php中的编程完全不同。

您需要使用干净的面向对象编程的真实范例来保持清洁和强类型。

我想到了这种技术的一些问题,这里有一些问题,而不是重要性。

  1. 你遇到的第一个问题是性能和内存占用:这将消耗大量内存并且性能非常差。

  2. 第二个问题是并发性,HashMap不是线程安全的。

  3. 第三个问题是类型安全:你不再有类型安全了,你可以写任何你想要的字段,没有人检查它,一个真正的反模式。

  4. 第四个问题是调试......调试代码很难。

  5. 第五个问题是:每个人都可以在知道他名字的情况下写字和阅读任何字段。

  6. 第六个问题:当您更改散列集中字段的名称时,您不会遇到任何类型的编译时错误,您只会遇到奇怪的运行时行为。重构将变得不可能。

  7. 键入的字段更实用,更干净。

答案 1 :(得分:1)

如果你正在花时间为此做一个课程,我会简单地添加你所需要的课程成员。这将为您的班级成员提供编译时间检查,从而大大减少您的微妙错误。