Obtenez des méthodes en classe:
Méthode publique [] getMethods (); // Obtenez toutes les méthodes publiques, y compris elle-même et l'héritage (implémentation) - la méthode ne prend pas en charge les génériques <>, c'est-à-dire non <> est suivi
Méthode publique [] getDeclaredMethods (); // Obtenez toutes les méthodes (privées, publiques, protégées, n'ont rien à voir avec les droits d'accès). Il n'inclut pas les méthodes héréditaires qui peuvent obtenir directement des attributs privés après JDK1.8. Il n'est pas nécessaire de définir des autorisations, mais seule la méthode GetDeclaredMethod doit encore définir des autorisations pour les méthodes de méthode.
Méthode publique [] getMethod (String MethodName, Class <T> ... ParameterTypes); // signifie obtenir une méthode publique spécifiée, y compris les paramètres héréditaires: Méthode: signifie le nom de la méthode obtenue
Paramètre Type: Type de classe représentant le paramètre de la méthode récupérée
Méthode publique [] GetDeclaredMethod (String Methodname, Class <T> ... ParameterTypes); // signifie obtenir une méthode spécifiée dans cette classe (privé, protégé, public, non pertinent pour accéder aux autorisations) et n'inclut pas les méthodes héréditaires
Class Clazz = new Person (). GetClass (); essayez {// appelant la méthode spécifiée / * @ suppressWarnings ("Unchecked") Method me = Clazz.getDeclaredMethod ("getName", string.class); me.invoke (Clazz.newinstance (), "Zhangsan"); * / // Obtenir toutes les méthodes Méthode [] Methods = Clazz.getDeclaredMethods (); pour (méthode méthode: méthodes) {System.out.println (méthode.getName ()); }} catch (exception e) {e.printStackTrace (); }Pour les appels de méthode avec plusieurs paramètres: les paramètres de paramètre suivis de GetDeclaredMethod peuvent être compris comme un paramètre formel du type de classe. En appelant Invoke, l'affectation de plusieurs paramètres est mieux enveloppée dans un nouvel objet [] {}.
@SuppressWarnings ("Unchecked") méthode méthode = Clazz.getDeclaredMethod ("getName", new class [] {string.class, int.class}); Method.invoke (new Person (), nouvel objet [] {"Zhangsan", 10});Appeler des méthodes statiques
class user {public static void staticMethod () {System.out.println ("static mthod invoke.");}} eg: class <user> clz = user.class; méthode statitMethod = clz.getMethod ("statimmthod"); Il existe deux façons d'appeler des méthodes statiques:
1. Étant donné que la méthode statique appartient à tous les objets d'instance, vous pouvez créer un objet arbitraire de la classe et l'appeler via l'objet.
staticMethod.invoke (clz.newinstance ()); // staticMethod n'a pas de paramètres, donc le type de liste de paramètres n'est pas rempli.
2. Si la méthode sous-jacente est statique, vous pouvez ignorer le paramètre OBJ spécifié et définir le paramètre OBJ sur NULL
staticMethod.invoke (null);
Plus de contenu lié:
Un: concept de réflexion
Vous pouvez obtenir des variables de membres et des méthodes d'une certaine classe via la classe de classe et l'appeler.
2: Obtenez des méthodes, des variables et des méthodes de construction par réflexion
@Test // Get Class Definition Method public void testMethod () lève une exception {@SuppressWarnings ("RawTypes") class Clazz = class.forname ("java.lang.string"); Méthode [] m = Clazz.getDeclaredMethods (); pour (int i = 0; i <M.Length; i ++) {System.out.println (m [i] .getName () + "" + m [i] .getDeclaringClass ()); }} @Test // Get Class DÉFINITION Variable public void testField () lève l'exception {@SuppressWarnings ("RawTypes") class Clazz = class.forname ("java.lang.string"); Champ [] fields = Clazz.getFields (); pour (champ f: champs) {System.out.println (f.getName ()); }} @Test // Obtenez le constructeur de la définition de classe à travers la réflexion publique void testConstructor () lève une exception {@SuppressWarnings ("RawTypes") class Clazz = class.forname ("java.lang.string"); @SuppressWarnings ("RawTypes") Constructeur [] Cons = Clazz.getConstructors (); For (@SuppressWarnings ("RawTypes") Constructeur C: CONS) {System.out.println (C + "" + C.GetDeclaringClass ()); }}Trois: appelez la méthode définie par la classe par réflexion
@Test // Appelez la méthode définie par la classe à travers la réflexion publique void TesInvokeMethod () lève une exception {class Clazz = class.forname ("java.lang.string"); // définir la classe de type de paramètres [] params = new class [1]; params [0] = string.class; Méthode m = Clazz.getDeclaredMethod ("indexof", params); // Définissez l'objet de paramètre [] p = nouvel objet [1]; p [0] = "e"; Entier s = (entier) M.Invoke ("Helloworld!", P); System.out.println (s); }