У меня есть класс
Class Test{
private String something ;
private String somethingElse;
private String somethingMore;
}
Я создаю экземпляр этого.
myInst = new Test();
и добавление значений к первой и второй переменным.
Теперь мне нужно проверить, является ли какая-либо переменная нулевой.
Я знаю, что могу сделать это, как if(myInst.something == null)
но для каждого элемента я добавляю в класс, который это трудно сделать.
Есть ли в любом случае, что я могу проверить экземпляр, перейдя через все элементы и увидев что-либо значение null.
как -
for(i=0; i< myInstanceVariables ; i++)
{
if(myInstanceVariable == null ){
//do something
donotDisplay(myInstanceVariable)
}
ТИА
Вы можете использовать Reflection, используя Fields
из вашего экземпляра. Добавьте свой код в свой класс. Это займет все поля и получит их значение.
Field[] fields = getClass().getDeclaredFields(); // get all the fields from your class.
for (Field f : fields) { // iterate over each field...
try {
if (f.get(this) == null) { // evaluate field value.
// Field is null
}
} catch (IllegalArgumentException ex) {
ex.printStackTrace();
} catch (IllegalAccessException ex) {
ex.printStackTrace();
}
}
Вот пример кода: https://ideone.com/58jSia
getDeclaredFields()
в отличие от getFields()
для получения переменных экземпляра
Вы должны использовать отражение над полем класса.
myInst = new Test();
for (Field field : myInst.getClass().getDeclaredFields())
if (field.get(myInst) == null)
// do something
Вы можете использовать отражение, однако, в вашем случае у вас есть только значения String, и, следовательно, также имеет смысл использовать HashMap (например):
HashMap hm = new HashMap();
hm.put("something", "itsValue");
hm.put("somethingElse", null);
Теперь вы можете указать столько значений, сколько захотите, и перебирать их так:
Set set = hm.entrySet();
Iterator i = set.iterator();
while(i.hasNext()){
Map.Entry me = (Map.Entry)i.next();
System.out.println(me.getKey() + " : " + me.getValue() );
}