Ich habe eine String
, die den Namen einer Klasse hat sagen "Ex"
(keine .class
Erweiterung). Ich möchte es zu einer Class
Variablen zugewiesen, wie folgt aus:Getting Class-Typ von String
Class cls = (string).class
Wie kann ich das tun?
Ich habe eine String
, die den Namen einer Klasse hat sagen "Ex"
(keine .class
Erweiterung). Ich möchte es zu einer Class
Variablen zugewiesen, wie folgt aus:Getting Class-Typ von String
Class cls = (string).class
Wie kann ich das tun?
Class<?> cls = Class.forName(className);
Aber Ihre className
sollte voll qualifiziert sein - das heißt com.mycompany.MyClass
es wirft ClassNotFound Exception – Steven
Dann ist entweder die Klasse nicht auf dem Klassenpfad oder Sie übergeben nicht den vollständig qualifizierten Klassennamen z. com.mycompany.project.ClassName –
Welchen Wert von 'className' übergeben Sie? Gibt es eine solche Klasse auf Ihrem Klassenpfad? – Bozho
Nicht sicher, was Sie fragen, aber ... Class.forname, vielleicht?
seine werfen ClassNotFound Exception – Steven
Was ist, wenn die Klasse in einem anderen Projekt ist? – Steven
Ich sehe, dass niemand Ihre Frage beantwortet. Es sollte egal sein, ob es in einem anderen Projekt ist, solange der Compiler weiß, wo er suchen soll. Da Sie wahrscheinlich eine IDE verwenden, hängt es wahrscheinlich nur von der IDE ab. Die Sache mit Referenzen, wissen Sie, dass alle Klassen, die Sie von den Java-Bibliotheken verweisen, nicht in Ihrem Projekt sind, oder? Aber der Compiler weiß, wo er nach ihnen suchen muss, weil er weiß, dass sie extern referenziert werden. Es scheint, dass Sie grundlegende Java-Programmierung erlernen müssen, wenn Sie versuchen, Java-Programmierung zu verbessern. : | – user919860
können Sie die forName
Methode der Class
verwenden:
Class cls = Class.forName(clsName);
Object obj = cls.newInstance();
Ich arbeite mit einem dynamischen Webprojekt in Eclipse. Ich verwende den obigen Code, um eine Klasse zu holen. aber es gibt ClassNotFoundException zurück, wenn ich eine String-Variable wie folgt verwende: 'String clsName =" com.mydoamin.className "; Klasse cls = Class.forName (clsName); ' Wenn Sie den Namen vollständig qualifizierten Klassen ist codieren als Parameter dann Dinge funktionieren. Irgendein Vorschlag? –
@djthequest Wenn unsere 'clsName' -Variable den vollqualifizierten Klassennamen enthält, sollte es keinen Unterschied zwischen ihrer Verwendung und der fest codierten Zeichenkette geben. Möglicherweise haben Sie nicht die Klasse, die Sie im Klassenpfad benötigen. Es kann hilfreich sein, eine gemeinsame Klasse aus demselben jar in Ihrem Startcode zu instanziieren, um sicherzustellen, dass die Bibliothek im Klassenlader vorhanden ist. – rsp
danke für deine Antwort, aber anstelle der Variablen, wenn ich die Zeichenfolge fest codiere, funktioniert Finnen, bedeutet dies, dass die Klassen im Klassenpfad sind, oder? Später fand ich heraus, 'Class.forName()' Methode erwartet eine 'final' Variable. Eine einfache Variable wird nicht funktionieren. –
String clsName = "Ex"; // use fully qualified name
Class cls = Class.forName(clsName);
Object clsInstance = (Object) cls.newInstance();
die Java Tutorial Weg für weitere Details bei http://java.sun.com/docs/books/tutorial/reflect/TOC.html auf Reflexion prüfen.
Bozhos Antwort könnte mehr Punkte haben, aber ich denke, dass Ihre Beschreibung beschreibender ist. PS. Warum ist dein Name JuanZe ??? Fast klingt wie eine Mischung aus Spanisch und Chinesisch. : D. Gibt es eine kluge Bedeutung dahinter? – user919860
@ user919860, Sie müssen es rückwärts lesen. – Pacerier
Ich arbeite mit einem dynamischen Webprojekt in Eclipse. Ich verwende den obigen Code, um eine Klasse zu holen. aber es gibt ClassNotFoundException zurück, wenn ich eine String-Variable wie folgt verwende: 'String clsName =" com.mydoamin.className "; Klasse cls = Class.forName (clsName); ' Wenn Sie den Namen vollständig qualifizierten Klassen ist hart codieren als Parameter dann Dinge funktionieren. Irgendein Vorschlag? –
Sie können die Klassenreferenz jeder Klasse während der Laufzeit durch das Java-Reflektionskonzept erhalten.
Überprüfen Sie den unten stehenden Code. Explaianation ist unten angegeben Hier ist ein Beispiel, die Klasse zurück verwendet eine Instanz von AClass zu erstellen:
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) {
... }
}
}
The output is
The first time calls forName:
static block in AClass
AClass's Constructor
The second time calls forName:
//Calss has been loaded so there is not "static block in AClass" printing outThe second
Die Exaplaination unter
Class.forName ein Klassenobjekt zu erhalten genannt wird
Mit dem Klassenobjekt erstellen wir die neue Instanz der Klasse.
Irgendwelche Zweifel darüber lassen Sie mich wissen
Was ist, wenn die Klasse in anderen Projekt ist? – Steven
Zu Ihrem Kommentar: Was! ??? Wenn Ihre Klasse in einem anderen Projekt war, dann hängt das nicht von Ihrer IDE ab? Soweit es Ihre Anwendung betrifft, wäre es so, als wäre es im selben Projekt, weil Bibliotheken extern referenziert werden. Wie Sie wissen, dass die Java-API-Klassen nicht in Ihrem Projekt sind, oder? Aber der Compiler für Ihre IDE weiß, wo Sie sie finden können, wenn Ihre IDE richtig eingerichtet ist. Gleiches gilt für Ihre Klassen aus einem anderen Projekt. – user919860