У меня String
есть имя класса, скажем "Ex"
(без .class
расширения). Я хочу присвоить это Class
переменной, например:
Class cls = (string).class
Как я могу это сделать?
java
class
reflection
Стивен
источник
источник
Ответы:
Но вы
className
должны быть полностью квалифицированными - т.е.com.mycompany.MyClass
источник
className
вы проходите? Есть ли такой класс в вашем пути к классам?ClassNotFoundException
. Уловка заключалась в том, чтобы обработать исключение в try-catch. Примерно так: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();
Ознакомьтесь с учебным курсом по Java по Reflection на http://java.sun.com/docs/books/tutorial/reflect/TOC.html для получения дополнительных сведений.
источник
String clsName = "com.mydoamin.className"; Class cls = Class.forName(clsName);
Если жестко задано полное имя класса в качестве параметра, все работает нормально. Любое предложение?Вы можете использовать
forName
методClass
:источник
String clsName = "com.mydoamin.className"; Class cls = Class.forName(clsName);
Если жестко задано полное имя класса в качестве параметра, все работает нормально. Любое предложение?clsName
переменная содержит полное имя класса, не должно быть разницы между ее использованием и жестко запрограммированной строкой. У вас может не быть нужного вам класса в пути к классам. Это может помочь создать экземпляр общего класса из той же банки в вашем коде запуска, чтобы убедиться, что библиотека присутствует в загрузчике классов.Class.forName()
метод ожидаетfinal
переменную. Простая переменная не работает.Вы можете получить ссылку на любой класс во время выполнения с помощью концепции отражения 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 вызывается для получения объекта класса
Используя объект класса, мы создаем новый экземпляр класса.
Любые сомнения по этому поводу дайте мне знать
источник
Должен быть:
Class.forName(String classname)
источник
Не уверен, о чем вы спрашиваете, но ... Может быть, Class.forname ?
источник