У меня есть a String
который имеет название класса, говорят "Ex"
(нет .class
расширение). Я хочу присвоить его a Class
переменная, как это:
Class cls = (string).class
Как я могу сделать это?
Class<?> cls = Class.forName(className);
Но ваш className
должен быть полностью определен, то есть com.mycompany.MyClass
Вы можете получить ссылку на класс любого класса во время выполнения через Концепция отражения Java.
Проверьте приведенный ниже код. Объяснение приведено ниже.
Вот один пример, в котором возвращенный класс используется для создания экземпляра 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 first time calls forName:
static block in AClass
AClass's Constructor
The second time calls forName:
Класс уже загружен, поэтому второго «статического блока в AClass» нет
Объяснение ниже.
Class.ForName вызывается для получения объекта класса
Используя объект класса, мы создаем новый экземпляр класса.
Если у меня возникнут сомнения, дайте мне знать
String clsName = "Ex"; // use fully qualified name
Class cls = Class.forName(clsName);
Object clsInstance = (Object) cls.newInstance();
Дополнительную информацию можно найти в учебном курсе Java по Reflection на http://java.sun.com/docs/books/tutorial/reflect/TOC.html .
Вы можете использовать метод forName
класса Class
:
Class cls = Class.forName(clsName);
Object obj = cls.newInstance();
Не уверен, что вы спрашиваете, но ... Class.forname , может быть?