Rijeลกeno: java get class by string

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:

Ostavite komentar