Java >> Java tutorial >  >> Tag >> static

Kald en statisk metode ved hjælp af Java Reflection API

1. Oversigt

I dette hurtige selvstudie vil vi diskutere, hvordan man påberåber en statisk metode i Java ved at bruge Reflection API.

Vi vil dække to forskellige scenarier:

  • Den statiske metode er offentlig .
  • Den statiske metode er privat.

2. En eksempelklasse

For at gøre demonstrationen og forklaringen nemmere, lad os først oprette en GreetingAndBye klasse som eksemplet:

public class GreetingAndBye {

    public static String greeting(String name) {
        return String.format("Hey %s, nice to meet you!", name);
    }

    private static String goodBye(String name) {
        return String.format("Bye %s, see you next time.", name);
    }
}

GreetingAndBye klasse ser ret simpelt ud. Den har to statiske metoder, én offentlig og en privat .

Begge metoder accepterer en streng argument og returnerer en streng som resultat.

Lad os nu kalde de to statiske metoder ved hjælp af Java Reflection API. I denne øvelse vil vi behandle koden som enhedstestmetoder.

3. Påberåber en offentlig statisk Metode

Lad os først se, hvordan man ringer til offentligheden statisk metode:

@Test
void invokePublicMethod() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
    Class<GreetingAndBye> clazz = GreetingAndBye.class;
    Method method = clazz.getMethod("greeting", String.class);

    Object result = method.invoke(null, "Eric");

    Assertions.assertEquals("Hey Eric, nice to meet you!", result);
}

Vi skal bemærke, at vi er nødt til at håndtere de påkrævede kontrollerede undtagelser, når vi bruger Reflection API.

I eksemplet ovenfor får vi først instansen af ​​den klasse, vi vil teste, som er GreetingAndBye .

Når vi har fået klasseinstansen, kan vi få det offentlige statiske metodeobjekt ved at kalde getMethod metode.

Når vi holder metoden objekt, kan vi kalde det blot ved at kalde invoke metode.

Det er umagen værd at forklare det første argument i påkaldelsen metode. Hvis metoden er en instansmetode, er det første argument det objekt, hvorfra den underliggende metode påkaldes.

Men når vi påberåber en statisk metode, sender vi null som det første argument , da statiske metoder ikke kræver en instans for at blive kaldt.

Endelig, hvis vi kører testen, vil den bestå.

3. Påberåber en privat statisk Metode

Påberåber en privat statisk metode er ret lig at påkalde en offentlig en. Lad os først tage et kig på koden:

@Test
void invokePrivateMethod() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
    Class<GreetingAndBye> clazz = GreetingAndBye.class;
    Method method = clazz.getDeclaredMethod("goodBye", String.class);
    method.setAccessible(true);

    Object result = method.invoke(null, "Eric");

    Assertions.assertEquals("Bye Eric, see you next time.", result);
}

Som vi kan se i koden ovenfor, når vi forsøger at få metoden genstand for en privat metode, bør vi bruge getDeclaredMethod i stedet for getMethod .

Desuden skal vi kalde method.setAccessible(true) at påberåbe en privat metode . Dette vil bede JVM om at undertrykke adgangskontrolkontrollen på denne metode.

Således giver det os mulighed for at påberåbe os den private metode. Ellers en IllegalAccessException undtagelse vil blive rejst.

Testen vil bestå, hvis vi udfører den.

4. Konklusion

I denne korte artikel har vi behandlet, hvordan man påberåber sig statiske metoder ved hjælp af Java Reflection API.

Som altid kan den komplette kode findes på GitHub.


Java tag