使用HashMap存储实例变量?

Jos*_*ton 7 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);
    }

}
Run Code Online (Sandbox Code Playgroud)

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

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

Sal*_*iti 14

我不认为这是处理你的意思的好方法.从我的角度来看,java编程与php编程完全不同.

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

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

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

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

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

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

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

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

键入的字段更有用,更干净.

  • +1我喜欢你列出的问题.我特别认为3,4,5和6比1和2更重要,但即使是那些2也很重要. (2认同)