如何将Object属性名称与字符串进行比较?

时间:2011-05-25 11:49:32

标签: java compare object-property

有没有办法比较Object中的属性是否等于字符串?

以下是名为Person

的Objet示例
public class Person {

    private String firstName;
    private String lastName;

    public Person(String firstName, String lastName){
        super();
        this.firstName = firstName;
        this.lastName = lastName;
    }

    //.... Getter and Setter

}

现在我有一个方法需要检查该字符串是否与Person属性名称相同。

public boolean compareStringToPropertName(List<String> strs, String strToCompare){
    List<Person> persons = new ArrayList<Person>();
    String str = "firstName";

    // Now if the Person has a property equal to value of str, 
    // I will store that value to Person.
    for(String str : strs){

        //Parse the str to get the firstName and lastName
        String[] strA = str.split(delimeter); //This only an example

        if( the condintion if person has a property named strToCompare){
            persons.add(new Person(strA[0], strA[1]));
        }
    }

}

我的实际问题远非如此,现在我怎么知道是否需要将字符串存储到Object的属性中。我现在的关键是我有另一个与对象属性相同的字符串。

我不想要一个硬代码,这就是为什么我想要达到这样的条件。

总结一下,有没有办法知道这个字符串("firstName")具有与对象(Person)相同的属性名称。

2 个答案:

答案 0 :(得分:5)

你将使用反射:

http://java.sun.com/developer/technicalArticles/ALT/Reflection/

更确切地说,假设您知道对象(Person)的类,您将使用Class.getField(propertyName)的组合来获取表示属性的Field对象,并获取Field.get(person)实际值(如果存在)。然后,如果它不是空白,您会认为该对象在此属性中具有值。

如果您的对象遵循某些约定,则可以使用“Java Bean”特定的库,例如:http://commons.apache.org/beanutils/apidocs/org/apache/commons/beanutils/package-summary.html#standard.basic

答案 1 :(得分:4)

您可以使用getDeclaredFields()获取所有声明的字段,然后将其与字符串

进行比较

例如:

class Person {
    private String firstName;
    private String lastName;
    private int age;
    //accessor methods
}

Class clazz = Class.forName("com.jigar.stackoverflow.test.Person");
for (Field f : clazz.getDeclaredFields()) {
      System.out.println(f.getName());
}

<强>输出

  

的firstName
  lastName的
  年龄


<强>替代地

您还可以getDeclaredField(name)

Returns:
the Field object for the specified field in this class
Throws:
NoSuchFieldException - if a field with the specified name is not found.
NullPointerException - if name is null

另见