Java - зацикливание и через переменные экземпляра класса

1

У меня есть класс

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)

}

ТИА

  • 0
    Вы можете использовать отражение для этих целей
  • 0
    По отражению :: Получить имена переменных, пройтись по ним и проверить значения в этом цикле? В чем здесь проблема?
Теги:

3 ответа

2

Вы можете использовать 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

  • 0
    Вы должны использовать getDeclaredFields() в отличие от getFields() для получения переменных экземпляра
  • 0
    Да я вижу, что :). Спасибо.
0

Вы должны использовать отражение над полем класса.

myInst = new Test();
for (Field field : myInst.getClass().getDeclaredFields())
  if (field.get(myInst) == null)
     // do something 
0

Вы можете использовать отражение, однако, в вашем случае у вас есть только значения 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() );
}
  • 0
    Это имеет смысл, но строковые ключи не выдают ошибку при компиляции, поэтому лично я предпочитаю не использовать такое решение, когда это возможно без строковых ключей. (Вот почему я предпочитаю аннотации, а не конфигурацию XML в рамках).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню