Vyřešeno: java get class by string

získat třídu po řetězci Ve světě programování je efektivní a efektivní řešení problémů pro každého vývojáře zásadní. Jedním takovým problémem, který se často objevuje při vývoji Java, je získání třídy podle názvu řetězce. Tento článek si klade za cíl poskytnout komplexní řešení tohoto problému a ponořit se do různých knihoven a funkcí zapojených do jeho řešení. Začněme pochopením kontextu, ve kterém se tento problém obecně vyskytuje.

Vývojáři Java často čelí situacím, kdy potřebují pracovat s třídami, jejichž názvy jsou poskytovány jako řetězce. Nejběžnějším případem použití je dynamické vytváření instancí třídy za běhu. Vědět, jak pracovat s řetězci a převádět je do třídy, je základní dovedností každého vývojáře pracujícího s Javou.

Java Reflection

K vyřešení tohoto problému poskytuje Java výkonnou funkci tzv Odraz. Reflection umožňuje kontrolu a interakci s třídami, rozhraními, poli a metodami za běhu. Umožňuje vývojářům vytvářet instance třídy, vyvolávat metody, získávat nebo nastavovat hodnoty polí a další – vše na základě řetězcové reprezentace názvu třídy.

Získání třídy podle názvu řetězce

Nyní prozkoumáme řešení problému získání třídy podle názvu řetězce. Použijeme Class.forName() metoda, která je součástí Java Reflection API.

public class GetClassFromString {
    public static void main(String[] args) {
        try {
            String className = "java.util.ArrayList";
            Class<?> clazz = Class.forName(className);
            System.out.println("Class: " + clazz.getName());
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

V tomto příkladu kódu jsme vytvořili řetězcovou proměnnou s názvem jméno třídy a přiřadili mu hodnotu „java.util.ArrayList“. Dále použijeme Class.forName() metoda, která přebírá řetězec className jako argument. Tato metoda vrací instanci třídy, kterou ukládáme do proměnné clazz typu Třída. Nakonec vytiskneme název třídy pomocí its getName () metoda.

  • Class.forName() – načte zadanou třídu a vrátí odkaz typu Class< ?>. Tato metoda vyvolá výjimku ClassNotFoundException, pokud není třída nalezena.
  • Třída – generický typ třídy používaný k uchování odkazu na načtenou třídu.
  • getName () – načte plně kvalifikovaný název třídy jako řetězec.

Vytváření instancí a používání třídních metod

Nyní, když víme, jak získat třídu podle názvu řetězce, podívejme se, jak vytvořit instanci získané třídy a jak interagovat s jejími metodami a poli.

public class CreateInstanceFromString {
    public static void main(String[] args) {
        try {
            String className = "java.util.ArrayList";
            Class<?> clazz = Class.forName(className);
            Object instance = clazz.getDeclaredConstructor().newInstance();
            Method addMethod = clazz.getMethod("add", Object.class);
            addMethod.invoke(instance, "Hello, world!");
            System.out.println("Instance: " + instance);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

V tomto příkladu nejprve získáme třídu jako před použitím Class.forName(). Dále vytvoříme instanci třídy using getDeclaredConstructor().newInstance(). Poté získáme metodu „add“ ze třídy pomocí getMethod() a vyvolejte jej na instanci pomocí vyvolat() metoda s řetězcem jako argumentem. Nakonec instanci vytiskneme, abychom viděli výsledek.

Závěrem lze říci, že vývojáři Javy se často setkávají se scénáři, kdy potřebují získat třídu z řetězce a pracovat s jejími metodami a poli za běhu. Pomocí Java Reflection mohou vývojáři efektivně zvládnout tyto situace a vytvořit dynamický, adaptabilní kód. Se znalostí Reflection a příkladů kódu uvedených v tomto článku se můžete s jistotou vypořádat s problémem získání třídy podle názvu řetězce.

Související příspěvky:

Zanechat komentář