Java Réflexion obtenir l'Instance à partir d'un Champ

est-il possible de l'Instance à partir d'un Champ?

Voici un exemple de code:

public class Apple {
    //... a bunch of stuffs..
}

public class Person {
    @MyAnnotation(value=123)
    private Apple apple;
}

public class AppleList {
    public add(Apple apple) {
        //...
    }
}

public class Main {
    public static void main(String args[]) {
        Person person = new Person();
        Field field = person.getClass().getDeclaredField("apple");

        //Do some random stuffs with the annotation ...

        AppleList appleList = new AppleList();

        //Now I want to add the "apple" instance into appleList, which I think
        //that is inside of field.

        appleList.add( .. . //how do I add it here? is it possible?

        //I can't do .. .add( field );
        //nor .add( (Apple) field );
    }
}

J'ai besoin d'utiliser la Réflexion, parce que je sais que je l'utilise avec des annotations. C'est juste un "échantillon", la méthode AppleList.add(Apple apple) est en fait appelé par l'obtention de la méthode de la classe, puis de l'appeler.

et ce faisant, comme: method.invoke( appleList, field );

causes: java.lang.IllegalArgumentException: argument type mismatch

*MODIFIER*
Cela peut être utile pour quelqu'un qui est à la recherche de la même chose.

si la Personne de la classe, ont eu 2 ou plus Apple variables:

public class Person {
    private Apple appleOne;
    private Apple appleTwo;
    private Apple appleThree;
}

quand je reçois le Terrain, comme:

Person person = new Person();
//populate person
Field field = person.getClass().getDeclaredField("appleTwo");
//and now I'm getting the instance...
Apple apple = (Apple) field.get( person );
//this will actually get me the instance "appleTwo"
//because of the field itself...

au début, en regardant la ligne seul: (Apple) field.get( person );

m'a fait penser que ce serait aller et obtenir une Instance qui correspond à Apple de classe.

c'est pourquoi je me demandais: "qui d'Apple qu'il sera de retour?"

OriginalL'auteur sam | 2012-10-11