Java 动态设置对象属性值

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

我是Java新手,正在尝试弄清楚如何为自定义对象动态设置属性值。我使用的是一个XML解析器,它循环遍历XML文件中的元素,我只是尝试将字符串设置为我的临时值

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等等。那么反射就是你的朋友了。我建议缓存找到的方法名。