Как сравнить имя свойства объекта со строкой?
Есть ли способ сравнить, если свойство в Object
равно строке?
Вот образец Objet с именем 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 ответа
Вы можете получить все объявленные поля, используя getDeclaredFields()
, а затем сравнить его со строкой
Например:
class Person {
private String firstName;
private String lastName;
private int age;
//accessor methods
}
Class clazz = Class.forName("com.jigar.stackru.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:
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