我有一个String
带有类名称的名字"Ex"
(无.class
扩展名)。我想将其分配给Class
变量,如下所示:
Class cls = (string).class
我怎样才能做到这一点?
我有一个String
带有类名称的名字"Ex"
(无.class
扩展名)。我想将其分配给Class
变量,如下所示:
Class cls = (string).class
我怎样才能做到这一点?
Answers:
Class<?> cls = Class.forName(className);
但是您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();
在http://java.sun.com/docs/books/tutorial/reflect/TOC.html上查看Reflection上的Java Tutorial跟踪以了解更多详细信息。
String clsName = "com.mydoamin.className"; Class cls = Class.forName(clsName);
如果将完全限定的类名作为硬编码作为参数,则一切正常。有什么建议吗?
您可以使用以下forName
方法Class
:
Class cls = Class.forName(clsName);
Object obj = cls.newInstance();
String clsName = "com.mydoamin.className"; Class cls = Class.forName(clsName);
如果将完全限定的类名作为硬编码作为参数,则一切正常。有什么建议吗?
clsName
变量包含完全限定的类名,则使用它和硬编码字符串之间应该没有区别。您可能在类路径中没有所需的类。从启动代码中的同一jar实例化一个通用类可能有助于确保该库在类加载器中存在。
Class.forName()
方法需要一个final
变量。一个简单的变量将不起作用。
您可以通过Java Reflection Concept在运行时获取任何类的Class引用。
检查以下代码。解释如下
这是一个使用返回的Class创建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对象
通过使用类对象,我们可以创建类的新实例。
任何对此的疑问让我知道
不知道您要问什么,但是... Class.forname,也许吗?