Java 动态设置对象属性值
我是Java新手,正在尝试弄清楚如何为自定义对象动态设置属性值。我使用的是一个XML解析器,它循环遍历XML文件中的元素,我只是尝试将字符串设置为我的临时值Java 动态设置对象属性值,java,object,properties,Java,Object,Properties,我是Java新手,正在尝试弄清楚如何为自定义对象动态设置属性值。我使用的是一个XML解析器,它循环遍历XML文件中的元素,我只是尝试将字符串设置为我的临时值 public MyObject tempObj; //gets instantiated before child elements public String tempValue; //gets set before each loop public void stepThroughChildElement(string element
public MyObject tempObj; //gets instantiated before child elements
public String tempValue; //gets set before each loop
public void stepThroughChildElement(string elementName) {
switch (elementName) {
case "Id":
tempObj.Id = Integer.parseInt(tempValue);
break;
case "Version":
tempObj.Version = Float.parseFloat(tempValue);
break;
default:
//something like this
//tempObj.setProperty(elementName, tempValue);
//or
//tempObj[elementName] = tempValue;
break;
}
}
在JavaScript中,我只使用第二个示例Object[“property”]=value代码>,但显然Java不是这样工作的。我也找到了这个对象,但我不知道它是否相关。为什么不使用一个
你为什么不使用一种新的方法呢
你可以这样做
tempObj.put("key", new Object()); // use HashtMap's put method
tempObj.setProperty("key", "value"); // use Proerties' setProperty method
你可以这样做
tempObj.put("key", new Object()); // use HashtMap's put method
tempObj.setProperty("key", "value"); // use Proerties' setProperty method
因为Java是静态类型的,所以不能只添加这样的属性。您必须为对象提供一个其他属性的映射
如果对象已经定义了属性,那么可以对每个属性进行硬编码,或者使用java.reflection来更动态地执行。在调用tempObj.getClass()之后,使用代码辅助并查看所有可用的方法。您可能可以直接访问字段,或者可能必须查找并调用setter方法。因为Java是静态类型的,所以不能只添加这样的属性。您必须为对象提供一个其他属性的映射
如果对象已经定义了属性,那么可以对每个属性进行硬编码,或者使用java.reflection来更动态地执行。在调用tempObj.getClass()之后,使用代码辅助并查看所有可用的方法。您可能可以直接访问字段,或者可能必须查找并调用setter方法。或者按照建议使用Map
。要获得更灵活的方法,请使用诸如JAXB之类的XML绑定框架。不要尝试像其他松散类型的语言那样使用Java。我使用的是SAX,或者按照建议使用Map
。要获得更灵活的方法,请使用诸如JAXB之类的XML绑定框架。不要像其他松散类型的语言那样使用Java。我使用SAX使用的是HashMap
,而不是HashTable
HashMap
是一种不推荐使用的集合类型。这意味着我的MyObject
需要扩展HashMap
?使用HashMap
而不是HashTable
HashTable
是一种不推荐使用的集合类型。这意味着我的MyObject
需要扩展HashMap
?我只是在寻找一个快捷方式,而不是说MyObject.String1=tempValue代码>,myObject.String2=tempValue代码>等等。那么反射就是你的朋友了。我建议在找到方法名称时缓存它们。我只是在寻找一个快捷方式,而不是说myObject.String1=tempValue代码>,myObject.String2=tempValue代码>等等。那么反射就是你的朋友了。我建议缓存找到的方法名。