Obtenir le nom d'un champ

Est-il possible en Java afin d'obtenir un nom de domaine en chaîne à partir de la réalité? comme:

public class mod {
    @ItemID
    public static ItemLinkTool linkTool;

    public void xxx{
        String fieldsName = *getFieldsName(linkTool)*;
    }
}

PS: je suis pas la recherche d'un champ de la classe/nom de la classe ou de l'obtention de Champ de nom de la Chaîne.


EDIT:
Quand je suis à la recherche d'elle je ne serais probablement pas besoin d'une méthode pour obtenir un nom du champ, le Champ de l'instance (à partir du champ "nom de code") suffirait. [par exemple Field myField = getField(linkTool)]

Il n'est probablement pas quelque chose que je veux en Java lui-même. Je vais prendre un coup d'oeil à l'ASM de la bibliothèque, mais à la fin, je pourrais utiliser la chaîne comme un identificateur pour les champs :/


EDIT2:
Mon anglais n'est pas génial (mais même dans ma langue maternelle j'aurais des problèmes expliquant cela), je suis donc l'ajout d'un exemple de plus. Heureusement nous, ça sera plus clair maintenant:

public class mod2 {
    @ItemID
    public static ItemLinkTool linkTool;

    @ItemID
    public static ItemLinkTool linkTool2;

    @ItemID
    public static ItemPipeWrench pipeWrench;

    public void constructItems() {
        //most trivial way
        linkTool = new ItemLinkTool(getId("linkTool"));
        linkTool2 = new ItemLinkTool(getId("linkTool2"));
        pipeWrench = new ItemPipeWrench(getId("pipeWrench"));

        //or when constructItem would directly write into field just
        constructItem("linkTool");
        constructItem("linkTool2");
        constructItem("pipeWrench");

        //but I'd like to be able to have it like this
        constructItemIdeal(linkTool);
        constructItemIdeal(linkTool2);
        constructItemIdeal(pipeWrench);
    }

    //not tested, just example of how I see it
    private void constructItem(String name){
        Field f = getClass().getField(name);
        int id = getId(name);

        //this could be rewritten if constructors take same parameters
        //to create a new instance using reflection
        if (f.getDeclaringClass() == ItemLinkTool){
            f.set(null, new ItemLinkTool(id));
        }else{
            f.set(null, new ItemPipeWrench(id));
        }
    }
}

La question est: comment pourrait ressembler le constructItemIdeal méthode? (À partir des réponses et googler autour de moi, je chose qu'il n'est pas possible en Java, mais qui sait..)

  • Si le champ n'est pas privé, il est alors possible de connaître le nom du champ visé, à partir notamment de la partie de code, mais l'analyse de bytecode. Vous pouvez utiliser ASM bibliothèque pour cela.
  • Qu'entendez-vous par le nom du domaine? C'est que la Chaîne "linkTool" dans votre exemple?
  • Entendez-vous le nom d'un champ d'une classe que vous avez écrit vous-même ou une autre classe?
  • Notez que ItemLinkTool a probablement plus que juste une méthode. Que doit votre getFieldsName de retour de méthode dans des cas comme ça?
  • Je ne sais pas si je l'ai écrit clairement, je veux même fonctionnalité que: le présent.getClass().getField("linkTool") juste sans la partie de chaîne de ~ ce.getClass().getField(linkTool).
  • Pourquoi auriez-vous besoin d'un Champ réfléchi lorsque vous avez déjà le champ réel?
  • Parce que dans la phase 1-je obtenir les Identifiants pour les champs marqués avec @ItemID (les champs sont nuls et plus de champs sera de même type), dans la phase suivante, je voudrais aborder les champs par leurs noms, pas des chaînes de caractères (j'ai écrit les raisons ci-dessous). À partir de la chaîne de nom, je serais en mesure d'obtenir un Champ d'instance et ensuite l'utiliser comme un index dans une carte pour obtenir son ID (nécessaire dans le Domaine du constructeur de la classe). Basé sur le Champ de la classe (et probablement d'annotation), je serais en mesure de créer une instance et l'affecter à la valeur d'un Champ. PS: par Domaine je veux dire java.lang.de réfléchir.Champ, pas n'importe quel domaine.
  • Ma motivation à obtenir le nom du champ est de l'utiliser pour rechercher les choses d'une valeur-clé de la base de données (comme mongodb). J'ai une struct avec les membres (champs) qui représente les données sauvegardées. - je utiliser les noms des membres à la recherche de la db.

InformationsquelleAutor monnef | 2013-02-18