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ć?
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ć?
Odpowiedzi:
Class<?> cls = Class.forName(className);
Ale className
powinieneś być w pełni wykwalifikowany - tjcom.mycompany.MyClass
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 .
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
metody Class
:
Class cls = Class.forName(clsName);
Object obj = cls.newInstance();
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 oczekuje final
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ć
Nie jestem pewien, o co pytasz, ale ... może imię klasy ?