Java - 循环并通过类的实例变量

时间:2014-06-06 10:23:07

标签: java

我有一个班级

Class Test{

private String something ;
private String somethingElse;
private String somethingMore;

}

我正在创建一个这样的实例。

myInst = new Test();

并将值添加到第一个和第二个变量。

现在我需要检查是否有任何变量为空。

我知道我可以像if(myInst.something == null)

那样做

但是对于我添加到课堂上的每个项目来说,这很难做到。

无论如何,我可以通过循环遍历所有元素并查看任何内容为空来检查实例。

就像 -

 for(i=0; i< myInstanceVariables ; i++)
{

if(myInstanceVariable == null ){

//do something 
donotDisplay(myInstanceVariable)

}

TIA

3 个答案:

答案 0 :(得分:2)

您可以使用实例中的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

答案 1 :(得分:0)

你必须在类的字段上使用反射。

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

答案 2 :(得分: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() );
}