如何用Java编写自定义类的迭代器

时间:2015-12-30 00:44:59

标签: java

我有这堂课:

public class MyClass{
   private Test test;

   public class Test{
     int num;
     String color;

     public Test(int num, String color){
     this.num = num;
     this.color = color;
     }
   }

   public MyClass(){

   }

   public void setNum(int number){
       test.num = number;
   }

   public void setColor(String color){
       test.color = color;
   }

   public Test getTest(){
       return test;
   }
}

我正在设置另一个类的值,最后我调用方法getTest:

MyClass myclass = new MyClass();
.
.    
.
Test test1 = myclass.getTest();

我想迭代对象test1来获取值。那可能吗?我是否必须在MyClass类中实现hasNext()方法?如果是,我该怎么做?

3 个答案:

答案 0 :(得分:0)

您的问题已经asked并已回答。

基本思路 - 您需要使用反射API。例如,建筑test.getClass().getDeclaredFields();

注意:您不会以这种方式创建迭代器,但您将能够遍历类字段。那个稍​​微不同的东西。

答案 1 :(得分:0)

你想要这个吗?

public static void main(String[] args) {

    MyClass myclass = new MyClass();
    Test test1 = myclass.getTest();
    //you need modify private Test test = new Test(1, "hahs");
    //import java.lang.reflect.Field;
    Field[] fields = test1.getClass().getDeclaredFields();
    for (int j = 0; j < fields.length-1; j++) {
        fields[j].setAccessible(true);
        try {
            System.out.println(fields[j].get(test1));
        } catch (IllegalArgumentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    //output
    //1
    //hahs
}

答案 2 :(得分:-1)

您必须使用反射才能遍历test类的成员。您必须导入java.lang.reflect.*并调用Class.forName("test1)以获取Class对象,并调用Class对象的getDeclaredFields方法以获取Field对象的数组。 Field对象具有获取或设置字段值的getset方法。

相关问题