gpt4 book ai didi

java - 扩展属性失败

转载 作者:行者123 更新时间:2023-12-02 07:48:17 26 4
gpt4 key购买 nike

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);

这失败了。我没有详细的描述,但它只是说它失败了。没有把握。什么。

我在这里做错了什么?还有?

我该如何解决这个问题?

或者你会推荐一些不同的东西吗?

我应该使用策略模式吗?将 Properties 传递给 PropertiesDecorator,并在那里进行验证?

编辑:我发现我遇到了类转换异常。

谢谢。

最佳答案

您收到 ClassCastException,因为第三方代码返回 Properties 的实例,而不是 PropertiesDecorator 的实例。一个简单的解决方案是让您的 PropertiesDecorator 接受一个 Properties 对象,并将其所有属性合并到您的属性中。也就是说,如果您希望 PropertiesDecorator 与 Properties 具有"is"关系。

否则,您可以只使用 Adapter pattern 拥有一个 PropertiesAdapter委托(delegate)给底层 Properties 实例并进行验证。为了完整起见,下面是一个非常基本的属性适配器类。必要时添加验证代码和其他委托(delegate)方法。

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);
}
}

关于java - 扩展属性失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10557472/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com