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

Posted

技术标签:

【中文标题】如何将对象属性名称与字符串进行比较?【英文标题】:How to compare Object property name to a string? 【发布时间】:2011-09-01 17:06:17 【问题描述】:

有没有办法比较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") 与 Object(Person) 具有相同的属性名称。

【问题讨论】:

【参考方案1】:

你将使用反射:

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

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

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

【讨论】:

【参考方案2】:

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


例如:

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


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


输出

名字 姓 年龄


或者

你也可以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

另见

Reflection Article

【讨论】:

以上是关于如何将对象属性名称与字符串进行比较?的主要内容,如果未能解决你的问题,请参考以下文章

如何将新字符串名称与 txt 文件中的现有字符串名称进行比较?

C#如何将变量用作键值字符串数组的对象列表对象构造函数中的属性名称

如何访问与该属性名称对应的给定字符串的对象属性

将每个资源的名称与 sqlite 数据库变量的内容进行比较

如何在 JavaScript 中给定其字符串名称设置对象属性(对象属性的..)?

如何在C语言中通过查看行中的一个属性对文件的行进行排序?