2012-05-11 45 views
0
Properties properties = AppConfigurationManager.getInstance().getProperties(ObjectContainer.class); 

我有這個代碼填充屬性。擴展屬性失敗

我想裝飾這個驗證一個字段。

public class PropertiesDecorator extends Properties{ 

    public void ValidateFooservHost(){ 
     for(Entry<Object, Object> element : this.entrySet()){ 
      if(element.getKey().toString().equals("ffxserv_host")){ 
       String newHostValue = ffxServHostCheck(element.getValue().toString()); 
       put(element.getKey(), newHostValue); 
      } 
     } 
    } 

    @Override 
    public Object setProperty(String name, String value) { 

     if(name.equals("foo")){ 
      value = fooHostCheck(value); 

     } 
     return put(name, value); 
    } 

    public String fooHostCheck(String valueFromConfig){ 
     String firstTwoChars = valueFromConfig.substring(0, 2); 

     if(firstTwoChars.equals("1:")){ 
      return valueFromConfig.substring(2, valueFromConfig.length()); 
     } 

     return valueFromConfig; 
    } 
} 

然而,

PropertiesDecorator properties = (PropertiesDecorator) AppConfigurationManager.getInstance().getProperties(ObjectContainer.class); 

失敗。我沒有一個翔實的描述,但它只是說它失敗了。不確定。什麼。

我在這裏做錯了什麼?也?

我該如何解決這個問題?

或者你會推薦一些不同的東西?

我應該使用策略模式嗎?將屬性傳遞給PropertiesDecorator,並在那裏進行驗證?

編輯: 我已經看到,我得到類拋出異常。

謝謝。

+0

它在哪裏失敗?在IDE中?構建工具?哪個構建工具?真的沒有信息? – Puce

+0

你可以發佈堆棧跟蹤嗎?我不清楚你想要完成驗證,但它可能屬於客戶端代碼,而不是屬性。 –

+0

請參閱我的編輯。 – DarthVader

回答

2

您正在接收ClassCastException,因爲第三方代碼正在返回Properties的實例,而不是您的PropertiesDecorator的實例。一個簡單的解決方案是讓你的PropertiesDecorator接受一個Properties對象,並將它的所有屬性合併到你的屬性中。那就是如果你想讓你的PropertiesDecorator與Properties有一個「是」的關係。

否則,您可以使用Adapter pattern的PropertiesAdapter委託給基礎Properties實例並進行驗證。爲了完整性,下面是Properties的一個非常基本的適配器類。必要時添加驗證代碼和其他委託方法。

public class PropertiesAdapter{ 
    private Properties props; 

    public PropertiesAdapter(){ 
     this.props = new Properties(); 
    } 

    public PropertiesAdapter(Properties props){ 
     this.props = props; 
    } 

    public Object set(String name, String value){ 
     return this.props.setProperty(name, value); 
    } 

    public String get(String name){ 
     return this.props.getProperty(name); 
    } 
} 
+1

對於PropertiesAdapter爲+1。 Properties類已經通過擴展Hashtable而不是使用一個來產生錯誤,不需要重做相同的錯誤。 –