comment lire des attributs de l'objet de façon dynamique en java?
Est-il possible de lire et d'imprimer les attributs de l'objet de façon dynamique(Java) ? par exemple, si j'ai de l'objet suivant
public class A{
int age ;
String name;
float income;
}
public class B{
int age;
String name;
}
public class mainA{
A obj1 = new A();
method(A);
method(B);
}
the output should be like
While running method(A):
Attribute of Object are age,name,income;
While executing method(B):
Attribute of Objects are age,name;
Ma question est que je peux passer les différents objets dans la méthode(), est-il possible que je peux accéder à l'attribut de l'différentes de l'objet en général.
Ne le faites pas si vous pouvez l'éviter, car elle rend le débogage d'une énorme douleur. Une des bonnes choses au sujet de Java est qu'il est très non-magique par défaut. Si vous pouvez en quelque sorte le faire sans avoir recours à la magie ou à la réflexion, mais plutôt avec quelque chose de très lisible et debuggable, il vous sera bénéfique dans le long terme.
OriginalL'auteur Mike | 2011-10-12
Vous devez vous connecter pour publier un commentaire.
Vous souhaitez utiliser L'API Reflection. Plus précisément, jetez un oeil à les membres de la classe de découverte.
Vous pourriez faire quelque chose comme ce qui suit:
Je voulais juste ajouter une mise en garde que vous normalement n'avez pas besoin de faire quelque chose de ce genre et pour la plupart des choses que vous avez probablement ne devrait pas. La réflexion peut rendre le code difficile à maintenir et à lire. Bien sûr, il ya des cas spécifiques, lorsque vous souhaitez utiliser la Réflexion, mais les rares.
<?>
.OriginalL'auteur Vivin Paliath
À l'aide de
org.apache.commons.beanutils.PropertyUtils
nous pouvons le faire. Si les getters et les setters sont définies pour le haricot, nous pouvons également définir dynamiquement la valeur:Pour définir la valeur d'une propriété particulière:
Sortie sera:
OriginalL'auteur subin
Vous pouvez utiliser la réflexion pour obtenir tous les domaines de votre objet (si la configuration de sécurité vous permet).
Si vous n'en avez pas besoin pour le bien de l'auto-éducation, alors il peut être utile d'utiliser ReflectionUtils de Apache Commons.
OriginalL'auteur Roman
Vous pouvez utiliser la réflexion, mais l'API n'est pas très agréable à utiliser. Mais ce que vous essayez de faire n'est pas du tout orienté objet. A et B doivent avoir de la méthode "imprimer soi-même", qui serait sortie de leurs valeurs (vous devez spécifier la méthode de la super-classe/interface pour l'appel à la méthode utilisant le polymorphisme).
OriginalL'auteur malejpavouk
Je pense que je devrais envisager une approche différente.
Si vous voulez vraiment le traitement de ces données est-il une raison qu'ils ne pouvaient pas être les tables de hashage (ont-ils des associés de code)?
Réflexion de le faire, mais il est un dernier recours--vous devriez toujours envisager sérieusement de différentes approches avant de descendre à la réflexion.
Cas, vous devez accéder à des variables comme qui existent--comme mappage de base de données (Hibernate) et d'injection (Printemps). Vous pourriez envisager si une solution packagée comme qui correspond à votre besoin afin que les futurs programmeurs peuvent comprendre ce que vous avez sans apprentissage tout au sujet de votre solution.
Aussi, le Printemps injection peut faire des choses qui pourraient correspondre à vos besoins.
Également si vous allez utiliser la réflexion, envisager sérieusement d'annotations, de sorte que vous n'êtes pas d'attacher votre fonctionnalité de ce qui devrait être simple arbitraire des noms d'attributs.
OriginalL'auteur Bill K