Comment identifier le setter de la méthode utilisant le nom de la propriété?
Pouvons-nous trouver setter nom de la méthode à l'aide de la propriété nom?
J'ai généré dynamiquement, un map<propertyName,propertyValue>
Par l'aide de la clé à partir de la carte (qui est propertyName) j'ai besoin d'invoquer appropriées de la méthode de définition de l'objet et passer la valeur de la carte (qui est propertyValue).
class A {
String name;
String age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCompany() {
return company;
}
public void setCompany(String company) {
this.company = company;
}
}
Ma carte contient deux éléments:
map<"name","jack">
map<"company","inteld">
Maintenant, je suis en itérant la carte et que je procède avec chaque élément de la carte, basée sur la touche (soit le nom ou la société) j'ai besoin de téléphoner la méthode de définition de catégorie A
par exemple, pour le premier point je reçois nom de la clé, donc besoin d'appeler new A().setName.
OriginalL'auteur Vishal Jagtap | 2013-02-27
Vous devez vous connecter pour publier un commentaire.
Bien que c'est possible de le faire en utilisant la réflexion, vous pourriez être mieux à l'aide de communes-beanutils. Vous pouvez facilement utiliser la
setSimpleProperty()
méthode comme suit:En supposant
a
est de typeA
.OriginalL'auteur ig0774
Si vous utilisez Printemps alors vous aurez probablement envie d'utiliser le
BeanWrapper
. (Si non, vous pourriez envisager de l'utiliser.)C'est plus facile que l'utilisation de la réflexion directement parce que les ressorts se font les conversions de type pour vous. (Il sera également l'honneur de Java propriété des éditeurs de sorte que vous pouvez vous inscrire personnalisé des convertisseurs de type de celles qu'il ne gère pas.)
OriginalL'auteur Alan Krueger
À l'aide d'une Carte à mettre un Nom de Champ et de sa Méthode de définition de Nom, ou à l'aide d'une Concaténation de chaînes pour "régler" avec une Première Lettre en Majuscule propertyName semble être un Assez faible approche pour appeler une Méthode d'initialisation.
Un scénario dans lequel vous connaissez le nom de la Classe et vous pouvez parcourir par le biais de ses propriétés et d'obtenir pour chaque Propriété Setter/GetterMethod Nom peut être résolu comme l'Extrait de Code ci-dessous.
Vous pouvez obtenir de l'Introspection et de la Propriété Descripteur de java.les haricots.*;
OriginalL'auteur Mitesh Manani
Reflection API
est ce que vous avez besoin. Supposons que vous connaissez le nom de la propriété et vous avez un objeta
de typeA
:Bien sûr, il vous sera demandé de gérer des exceptions.
OriginalL'auteur ogzd
Vous pourriez obtenir la méthode setter comme ceci:
Mais il ne fonctionne pour votre classe. Si vous aviez une classe qui étend une classe de base de la classe.getField(nom) ne fonctionnerait pas déjà.
Vous devriez jeter un coup d'oeil à la BeanWrapper dans Juffrou réfléchir. Il est plus performant que Springframework et permet à votre carte de grain de transformation et beaucoup plus.
Avertissement: je suis le gars qui se développe Juffrou réfléchir. Et si vous avez des questions sur la façon de l'utiliser, je serai plus qu'heureux de répondre.
OriginalL'auteur Martins
C'est en fait triviale, car il y a des règles sur la capitalisation de camelCase noms de champ. Selon les JavaBeans API (article 8.8), le champ n'est pas activés que si l'un des deux premiers caractères du nom de champ sont capitales.
Ainsi
index
devientIndex
->setIndex()
xIndex
restexIndex
->setxIndex()
URL
resteURL
->setURL()
Le code pour effectuer cette conversion serait comme suit:
Le nom de l'accesseur peut ensuite être trouvé en préfixant par "set" en face d'elle:
"set" + capatalizeFieldName(field.getName())
Le même s'applique à des getters, sauf que les types boolean utilisation "est" au lieu de "sortir" comme préfixe.
OriginalL'auteur kemosabe
Je pense que vous pouvez probablement le faire avec réflexion, une solution plus simple est de faire la comparaison de chaînes sur la clé, et appeler la méthode appropriée:
OriginalL'auteur Shadi A