Mam, String
który ma nazwę klasy, powiedz "Ex"
(bez .class
rozszerzenia). Chcę go przypisać do Class
zmiennej, takiej jak ta:
Class cls = (string).class
Jak mogę to zrobić?
java
class
reflection
Steven
źródło
źródło
Odpowiedzi:
Ale
className
powinieneś być w pełni wykwalifikowany - tjcom.mycompany.MyClass
źródło
className
przechodzisz? Czy na Twojej ścieżce zajęć jest taka klasa?ClassNotFoundException
. Sztuczka polegała na tym, aby obsłużyć wyjątek podczas próby złapania. Coś takiego:try { Class<?> cls = Class.forName("com.company.MyClass"); } catch (ClassNotFoundException ex) { /* do something to handle the case when the string isn't valid and therefor the class can't be found */ }
String clsName = "Ex"; // use fully qualified name Class cls = Class.forName(clsName); Object clsInstance = (Object) cls.newInstance();
Aby uzyskać więcej informacji, zapoznaj się ze ścieżką samouczków Java w Reflection pod adresem http://java.sun.com/docs/books/tutorial/reflect/TOC.html .
źródło
String clsName = "com.mydoamin.className"; Class cls = Class.forName(clsName);
Jeśli jako parametr jest zakodowana w pełni kwalifikowana nazwa klasy, wszystko działa dobrze. Jakieś sugestie?Możesz skorzystać z
forName
metodyClass
:źródło
String clsName = "com.mydoamin.className"; Class cls = Class.forName(clsName);
Jeśli jako parametr jest zakodowana w pełni kwalifikowana nazwa klasy, wszystko działa dobrze. Jakieś sugestie?clsName
zmienna zawiera w pełni kwalifikowaną nazwę klasy, nie powinno być różnicy między jej użyciem a zakodowanym ciągiem. Możesz nie mieć potrzebnej klasy w ścieżce klas. Może pomóc utworzenie wystąpienia wspólnej klasy z tego samego pliku jar w kodzie startowym, aby upewnić się, że biblioteka jest obecna w module ładującym klasy.Class.forName()
metoda oczekujefinal
zmiennej. Prosta zmienna nie zadziała.Odwołanie do klasy dowolnej klasy można pobrać w czasie wykonywania za pomocą koncepcji Java Reflection Concept.
Sprawdź poniższy kod. Wyjaśnienie podano poniżej
Oto jeden przykład, który używa zwróconej klasy do tworzenia instancji AClass:
package com.xyzws; class AClass { public AClass() { System.out.println("AClass's Constructor"); } static { System.out.println("static block in AClass"); } } public class Program { public static void main(String[] args) { try { System.out.println("The first time calls forName:"); Class c = Class.forName("com.xyzws.AClass"); AClass a = (AClass)c.newInstance(); System.out.println("The second time calls forName:"); Class c1 = Class.forName("com.xyzws.AClass"); } catch (ClassNotFoundException e) { // ... } catch (InstantiationException e) { // ... } catch (IllegalAccessException e) { // ... } } }
Wydruk to
The first time calls forName: static block in AClass AClass's Constructor The second time calls forName:
Klasa została już załadowana, więc nie ma drugiego „statycznego bloku w AClass”
Wyjaśnienie znajduje się poniżej
Class.ForName jest wywoływana w celu pobrania obiektu klasy
Korzystając z obiektu Class, tworzymy nową instancję klasy.
Wszelkie wątpliwości co do tego daj mi znać
źródło
Powinno być:
Class.forName(String classname)
źródło
Nie jestem pewien, o co pytasz, ale ... może imię klasy ?
źródło