Posiadam numer String
, który ma nazwę klasy: "Ex"
(bez rozszerzenia .class
). Chcę, aby przypisać ją do zmiennej Class
, tak:Uzyskiwanie typu klasy z ciągu znaków
Class cls = (string).class
W jaki sposób można to zrobić?
Posiadam numer String
, który ma nazwę klasy: "Ex"
(bez rozszerzenia .class
). Chcę, aby przypisać ją do zmiennej Class
, tak:Uzyskiwanie typu klasy z ciągu znaków
Class cls = (string).class
W jaki sposób można to zrobić?
Class<?> cls = Class.forName(className);
Ale twój className
powinny być w pełni wykwalifikowani - tj com.mycompany.MyClass
Nie jestem pewien, o co pytasz, ale ... Class.forname, może?
Wyrzucanie wyjątku ClassNotFound – Steven
co, jeśli klasa jest w innym projekcie? – Steven
Widzę, że nikt nie odpowiada na twoje pytanie. Nie powinno mieć znaczenia, czy jest w innym projekcie, o ile kompilator wie, gdzie szukać. Ponieważ prawdopodobnie używasz IDE, prawdopodobnie zależy to wyłącznie od IDE. Coś na temat referencji, wiesz, że wszystkie klasy, które odwołujesz się z bibliotek Java, nie są w twoim projekcie, prawda? Ale kompilator wie, gdzie ich szukać, ponieważ wie, że są one przywoływane zewnętrznie. Wygląda na to, że przy próbie zaawansowanego programowania w języku Java trzeba nauczyć się podstaw programowania w języku Java. : | – user919860
Można użyć metody forName
z Class
:
Class cls = Class.forName(clsName);
Object obj = cls.newInstance();
Pracuję z dynamicznym projektem WWW w czasie zaćmienia. Używam powyższego kodu do pobrania klasy. ale zwraca ClassNotFoundException, gdy używam zmiennej łańcuchowej w następujący sposób: 'String clsName =" com.mydoamin.className "; Klasa CLS = Class.forName (clsName); ' Jeśli hardcode pełną nazwę klasy jako parametr następnie wszystko działa prawidłowo. Jakieś sugestie? –
@djthequest Jeśli nasza zmienna 'clsName' zawiera w pełni kwalifikowaną nazwę klasy, nie powinno być żadnej różnicy między używaniem jej a stałym zakodowaniem. Możesz nie mieć klasy, której potrzebujesz w ścieżce klas. Może pomóc utworzyć instancję klasy wspólnej z tego samego słoika w kodzie rozruchowym, aby upewnić się, że biblioteka jest obecna w programie ładującym klasy. – rsp
dziękuję za odpowiedź, ale zamiast zmiennej, jeśli hardcode ciąg, działa płetwy, oznacza to, że klasy są w ścieżce klasy, prawda? Później zorientowałem się, że metoda 'Class.forName()' oczekuje zmiennej 'final'. Prosta zmienna nie zadziała. –
String clsName = "Ex"; // use fully qualified name
Class cls = Class.forName(clsName);
Object clsInstance = (Object) cls.newInstance();
Sprawdzić ślad Java Tutorial na odbicie w http://java.sun.com/docs/books/tutorial/reflect/TOC.html dla dalszych szczegółów.
Odpowiedź Bozho może mieć więcej punktów, ale myślę, że twoja jest bardziej opisowa. PS. Dlaczego nazywasz się JuanZe ??? Prawie brzmi jak połączenie hiszpańskiego i chińskiego. :RE. Czy kryje się za tym jakieś sprytne znaczenie? – user919860
@ user919860, Musisz przeczytać go od tyłu. – Pacerier
Pracuję z dynamicznym projektem WWW w czasie zaćmienia. Używam powyższego kodu do pobrania klasy. ale zwraca ClassNotFoundException, gdy używam zmiennej łańcuchowej w następujący sposób: 'String clsName =" com.mydoamin.className "; Klasa CLS = Class.forName (clsName); ' Jeśli hardcode pełną nazwę klasy jako parametr następnie wszystko działa prawidłowo. Jakieś sugestie? –
Możesz uzyskać odwołanie do klasy dowolnej klasy w czasie wykonywania, korzystając z koncepcji Java Reflection.
Sprawdź poniższy kod. Explaianation podano poniżej Oto jeden przykład, który używa zwracane klasy do utworzenia 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) {
... }
}
}
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
Exaplaination jest poniżej
Class.forName nazywa uzyskać obiektu klasy
Korzystając z obiektu klasy, tworzymy nową instancję klasy.
Wszelkie wątpliwości na ten temat daj mi znać
co, jeśli klasa jest w innym projekcie? – Steven
Twoja komentarz: What! ??? Jeśli twoja klasa była w innym projekcie, to czy nie byłoby to zależne od twojego IDE? Jeśli chodzi o twoją aplikację, to tak, jakby był on w tym samym projekcie tak czy inaczej, ponieważ jego biblioteki są przywoływane zewnętrznie. Wiesz, że klasy Java API nie są w twoim projekcie, prawda? Ale twój kompilator IDE wie, gdzie je znaleźć, jeśli twój IDE jest poprawnie skonfigurowany. To samo dotyczy twoich zajęć z innego projektu. – user919860