Riješeno: java get class by string

Posljednje ažuriranje: 06/19/2023

dobiti klasu po nizu U svijetu programiranja, efikasno i efektivno rješavanje problema je ključno za svakog programera. Jedan takav problem koji se često javlja u razvoju Jave je dobijanje klase po njenom imenu stringa. Ovaj članak ima za cilj da pruži sveobuhvatno rešenje za ovaj problem i udubi se u različite biblioteke i funkcije uključene u njegovo rešavanje. Počnimo s razumijevanjem konteksta u kojem se ovaj problem općenito javlja.

Java programeri se često suočavaju sa situacijama kada treba da rade sa klasama čija su imena data kao stringovi. Najčešći slučaj upotrebe je kada se dinamički kreiraju instanci klase tokom vremena izvođenja. Znati kako raditi sa stringovima i pretvarati ih u klasu je neophodna vještina za svakog programera koji radi sa Javom.

Java Reflection

Za rješavanje ovog problema, Java pruža moćnu funkciju tzv odraz. Reflekcija omogućava inspekciju i interakciju sa klasama, interfejsima, poljima i metodama tokom vremena izvođenja. Omogućava programerima da kreiraju instance klase, pozivaju metode, dobiju ili postave vrijednosti polja i još mnogo toga – sve na osnovu string reprezentacije naziva klase.

Dobivanje klase po imenu stringa

Hajde sada da istražimo rešenje problema dobijanja klase po njenom nazivu stringa. Koristićemo Class.forName() metoda, koja je dio Java Reflection API-ja.

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();
        }
    }
}

U ovom primjeru koda kreirali smo varijablu niza pod nazivom ClassName i dodijelio mu vrijednost “java.util.ArrayList”. Zatim koristimo Class.forName() metoda, koja uzima string className kao argument. Ova metoda vraća instancu klase koju pohranjujemo u clazz varijablu tipa razred. Konačno, ispisujemo ime klase koristeći its getName () metoda.

  • Class.forName() – učitava navedenu klasu i vraća referencu tipa Class< ?>. Ova metoda će baciti ClassNotFoundException ako klasa nije pronađena.
  • razred – generički tip klase koji se koristi za držanje reference na učitanu klasu.
  • getName () – preuzima potpuno kvalificirano ime klase kao string.

Kreiranje instanci i korištenje metoda klase

Sada kada znamo kako da dobijemo klasu po njenom nazivu stringa, hajde da vidimo kako da kreiramo instancu dobijene klase i da komuniciramo sa njenim metodama i poljima.

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();
        }
    }
}

U ovom primjeru prvo dobivamo klasu kao prije korištenja Class.forName(). Zatim kreiramo instancu klase koristeći getDeclaredConstructor().newInstance(). Zatim dobijamo metodu “add” od klase koja koristi getMethod() i pozovite ga na instanci koristeći invoke() metoda sa stringom kao argumentom. Konačno, ispisujemo instancu da vidimo rezultat.

Zaključno, Java programeri se često susreću sa scenarijima u kojima treba da dobiju klasu iz stringa i rade sa njenim metodama i poljima tokom vremena izvršavanja. Koristeći Java Reflection, programeri mogu efikasno da se nose sa ovim situacijama i kreiraju dinamičan, prilagodljiv kod. Sa poznavanjem Reflection-a i primjera koda koji su dati u ovom članku, možete se sa sigurnošću pozabaviti problemom dobivanja klase prema njenom imenu stringa.

Slični postovi: