J'ai rencontré un problème comme celui-ci dans mon travail récemment:
J'ai fait un outil de test pour toutes les interfaces dans un certain projet. En utilisant la technologie de swing Java, le projet a différentes versions. Toutes les interfaces de la version ne sont pas les mêmes, et les outils que j'ai fabriqués doivent être compatibles avec toutes les versions.
Ce problème a donc été introduit:
Si certaines interfaces n'existent pas dans certaines versions, une erreur sera signalée lors de l'exécution de cette opération via l'interface. Par conséquent, pour être compatible avec toutes les versions, vous devez déterminer si la méthode existe avant d'appeler la méthode. En même temps, afin de ne pas lancer des exceptions pendant la compilation, lors de l'appel de la méthode
Il doit également être appelé par réflexion, et l'implémentation spécifique est la suivante:
1. Utilisez la réflexion pour déterminer si la méthode existe
/ ** * Déterminez si la méthode existe * * @param obj jobjectService instance * @param méthode name nom * @param paratypes méthode forme de type paramètre Type * @return * / public static booléen jugeMEthodiseXist (objet obj, string méthodyname, class [] PARATYPES) {boolean result = true; essayez {if (null! = obj) {méthode méthode = obj.getClass (). getMethod (méthodyname, paratypes); }} catch (nosuchMethodexception ex) {showwarninfo (ex.toString ()); log.Error ("L'exception se produit à:" + mainjframe.hostname + "; les détails sont:" + ex.getMessage ()); résultat = false; } Retour Résultat; }Description du paramètre:
(1) OBJ: un objet qui appelle une méthode
(2) Methodname: le nom de la méthode à appeler
(3) Paratypes: le type de paramètre requis par la méthode (multiple est un tableau)
Grâce à cette méthode, vous pouvez déterminer si la méthode Méthodname (type de paramètre) que vous appelez via l'objet OBJ existe. S'il n'existe pas, il exécutera une exception NosuchMethodexception
2. Appelez la méthode par la réflexion pour éviter les exceptions de temps de compilation
sysuser = mainjframe.getsySuser (); Classe [] paramobj = {string.class, long.class, string.class, string.class, int.class}; // juger si la méthode existe booléen iSexist = Commonutil.judgeMethodisexist (sysuser, "CreateBucket", paramobj); if (isExist) {try {// appelant la méthode class Clazz = sysuser.getClass (); // Nom de la méthode - Le type de paramètre dans la méthode (dans l'ordre des paramètres) CreateBucket = Clazz.getDeclaredMethod ("CreateBucket", String.class, long.class, string.class, string.class, int.class); int créate = (int) createBucket.invoke (sysuser, backetname, long.parselong (bucketSize), backetloc, backetacl, integer.parseint (stringUtil.emptytozero (bucketcycle))); if (create == 1) {communUtil.showinfo ("Bucket créé avec succès"); Log.info ("Bucket créé avec succès"); } else {Commonutil.showwarninfo ("Création de seau a échoué, erreur interne du serveur!"); Log.info ("Création de seau Échec, erreur interne du serveur"); }} catch (exception ex) {communUtil.showwarninfo (ex.getMessage ()); Log.Error ("L'exception se produit à:" + mainjframe.hostname + "; les détails sont:" + ex.getMessage ()); }}Dans le code ci-dessus:
Ligne 1: Object Sysuser qui appelle la méthode CreateBucket Méthode
Ligne 2: tableau des types de paramètres dans la méthode, utilisés pour déterminer si la méthode existe
Ligne 3: Déterminez si la méthode existe par tableau d'objet, nom de méthode et type de paramètre
Grâce aux trois lignes ci-dessus, les tâches suivantes seront exécutées lorsque la méthode existe. S'il n'existe pas, des informations d'exception seront invitées.
Ligne 6: Obtenez la classe de l'objet
Ligne 7: Obtenez l'objet Méthode Méthode, le paramètre est le type correspondant au nom et au paramètre de la méthode
Ligne 8: Appelez la méthode CreateBucket à travers la réflexion de l'objet de la méthode, les paramètres sont l'objet sysuser et les paramètres (valeurs) requis respectivement.
Grâce à la méthode ci-dessus, aucune exception de temps de compilation ne se produit même si une interface dans l'objet n'existe pas.
Pour être honnête, c'est la première fois que je rencontre un problème avec la réflexion Java dans mon projet, il est donc nécessaire de l'enregistrer!
Résumer
Ce qui précède est l'intégralité du contenu des notes d'application de cet article sur la réflexion Java dans les travaux réels. J'espère que ce sera utile à tout le monde. Les amis intéressés peuvent continuer à se référer à ce site:
Tutoriel de réflexion Java
Des choses que vous devez savoir sur le mécanisme de réflexion Java
S'il y a des lacunes, veuillez laisser un message pour le signaler. Merci vos amis pour votre soutien pour ce site!