1

只是一个理论上的问题,可能会导致设计方面的一些考虑。如果你用这个可重用的类替换 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 );
    }

}
4

3 回答 3

3

这将导致非常不稳定的代码。您的任何获取/设置都不会在编译时进行检查。通常,您希望您的代码快速失败,而编译时间绝对是可以完成的最快速度。

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

于 2013-06-18T02:03:32.983 回答
3

主要缺点

  • 慢得多
  • 使用更多内存
  • 类型安全性较低
  • 更容易出错
  • 更难维护
  • 更多的代码来写/读
  • 更多的线程安全问题(更多的中断方法)和更难使线程安全。
  • 更难调试,注意字段的顺序可以伪随机排列,对于相同“类型”的不同对象不同,这使得它们更难阅读。
  • 更难重构
  • 很少或不支持代码分析。
  • 不支持代码完成。

顺便说一句,一些动态语言完全按照您的建议进行操作,并且存在所有这些问题。

于 2013-06-18T02:10:28.117 回答
1
  • 不编译检查。
  • 你必须垂头丧气,这不好。
  • 难以维持。
  • 反对面向对象,

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

于 2013-06-18T02:12:13.693 回答