用HashMap替换类属性有什么问题吗?

时间:2013-06-18 02:01:20

标签: java attributes hashmap getter-setter

只是一个可以在设计方面引起一些考虑的理论问题。如果你用这个可重用的类替换POJO怎么办?它可能会避免一些样板代码,但它会带来什么问题呢?

// Does not include failsafes, guards, defensive copying, whatever...

class MySingleGetterAndSetterClass{

    private HashMap<String,Object> myProperties;

    public SingleGetterAndSetter( String name ){
        myProperties = new HashMap<String,Object>();
        myProperties.put( "name", name );
    }

    public Object get( string propertyName ){
        return myProperties.get( propertyName );
    }

    public Object set( string propertyName, Object value ){
        myProperties.put( propertyName, value );
    }

}

3 个答案:

答案 0 :(得分:3)

这会导致代码非常不稳定。您的获取/设置都不会被编译时检查。通常,您希望代码快速失败,编译时间是绝对最快的。

为了使它甚至相对安全,你必须在整个地方进行空检查/异常处理,然后如何在代码中始终如一地处理未找到值的情况?它会变得非常臃肿。

答案 1 :(得分:3)

主要缺点

  • 慢得多
  • 使用更多内存
  • 减少类型安全
  • 更容易出错
  • 更难维护
  • 更多代码写/读
  • 更多线程安全问题(更多中断方法),更难以使线程安全。
  • 更难调试,注意字段的顺序可以伪随机排列,不同的同一“类型”的不同对象使它们更难阅读。
  • 更难以重构
  • 很少或不支持代码分析。
  • 代码完成时不支持。
BTW一些​​动态语言完全符合您的建议,并且存在所有这些问题。

答案 2 :(得分:1)

  • 不编译检查。
  • 你必须向下转,这不好。
  • 难以保持。
  • 反对OOP,

你的pojos是一个代表现实世界中某事物的抽象。 如果我理解你想把它们的属性放在地图中,这不是一个好的设计。你反对使用OOP。如果您以这种方式思考,您可以将所有类放在一个大字符串中并按位置搜索它们,这比仅使用属性作为键的字典更好。