现在的位置: 首页 > 综合 > 正文

失败的产品PropertySet

2011年01月24日 ⁄ 综合 ⁄ 共 1364字 ⁄ 字号 评论关闭

不错的想法,失败的产品——PropertySet

PropertySet确实是个好东西,至于有多好我就不说了,自己去看吧。

不过,PropertySet确实让我很恼火。我做了一个晚上的实验都没有成功,结果问题却出在它的源代码里!且听我慢慢说来。

我做了一个最简单的例子,有多简单呢?看看配置文件就知道:

<propertysets>

      <propertyset name="myBean" class="testLab.MyBean">

            <arg name="myInt" value="57"/>

            <arg name="myString" value="na57"/>

      </propertyset>

</propertysets>

 

做这个例子只是为了从配置文件里面读出我所需要的值。我的测试代码如下:

PropertySet ps = PropertySetManager.getInstance("myBean",null);

System.out.print(ps.getString("myString"));

Assert.assertEquals("na57",ps.getString("myString"));

 

结果失败了,失败在哪里?我在保证了我的代码万无一失的情况下,去看PropertySet的代码,我使用的PropertySet接口实现是MemoryPropertySet类,于是我就先找到了这个类读数据的代码:

public String getString(String key) {

      try {

            return (String) get(STRING, key);

      } catch (NullPointerException e) {

            return null;

      }

}

接着是get方法:

protected synchronized Object get(int type, String key) throws InvalidPropertyTypeException {

      if (exists(key)) {

            ValueEntry v = (ValueEntry) getMap().get(key);

 

            if (v.type != type) {

                  throw new InvalidPropertyTypeException();

           }

 

            return v.value;

      } else {

            return null;

      }

}

再后来就是getMap()方法了:

protected HashMap getMap() {

      return map;

}

到这里都没什么问题,接下来要看map在什么地方被赋值了,mapMemoryPropertySet类的私有字段,自然是不会在MemoryPropertySet的基类里赋值了,但是,在MemoryPropertySet类里面,对map的赋值操作只有一个地方:

public void init(Map config, Map args) {

      map = new HashMap();

}

 

剩下就不说了,map里面根本什么也没有,晕死~~~

抱歉!评论已关闭.