Как сравнить имя свойства объекта со строкой? - PullRequest
1 голос
/ 25 мая 2011

Есть ли способ сравнить, если свойство в Object равно строке?

Вот пример объекта с именем Person

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 ]

5 голосов
/ 25 мая 2011

Вы будете использовать Reflection:

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

4 голосов
/ 25 мая 2011

Вы можете выбрать все объявленные поля, используя 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
age


в качестве альтернативы

Также можно 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

См. Также

...