Ich habe diese Klasse:

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;
   }
}

Ich setze die Werte einer anderen Klasse und rufe am Ende die Methode getTest auf:

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

Ich möchte das Objekt test1 iterieren, um die Werte zu erhalten. Ist das möglich? Muss ich die hasNext () -Methode in der Klasse MyClass implementieren? Wenn ja, wie kann ich das machen?

-4
dirac 30 Dez. 2015 im 03:44

3 Antworten

Beste Antwort

Ihre Frage wurde bereits gestellt und beantwortet.

Grundidee - Sie müssen die Reflection-API verwenden. Zum Beispiel Konstruktion test.getClass().getDeclaredFields();

Hinweis: Auf diese Weise erstellen Sie keinen Iterator, können jedoch Klassenfelder durchlaufen. Das etwas andere Dinge.

0
Community 23 Mai 2017 im 10:27

Du willst das?

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
}
0
Sgmder 30 Dez. 2015 im 02:08

Sie müssen Reflection verwenden, um die Mitglieder der Klasse test zu durchlaufen. Sie müssen java.lang.reflect.* importieren und Class.forName("test1) aufrufen, um ein Class-Objekt abzurufen, und die getDeclaredFields -Methode des Class-Objekts aufrufen, um ein Array von Field-Objekten abzurufen. Das Field Objekt verfügt über die Methoden get und set, mit denen der Wert des Felds abgerufen oder festgelegt wird.

-1
Arthur Laks 30 Dez. 2015 im 00:52