Java 从字符串获取类类型
我有一个Java 从字符串获取类类型,java,class,reflection,Java,Class,Reflection,我有一个字符串,它有一个类的名称,比如“Ex”(没有.class扩展名)。我想将其分配给类变量,如下所示: Class cls = (string).class 我该怎么做呢?classcls=Class.forName(className); Class<?> cls = Class.forName(className); 但是您的className应该是完全合格的-即com.mycompany.MyClass它应该是: Class.forName(String classn
字符串
,它有一个类的名称,比如“Ex”
(没有.class
扩展名)。我想将其分配给类
变量,如下所示:
Class cls = (string).class
我该怎么做呢?classcls=Class.forName(className);
Class<?> cls = Class.forName(className);
但是您的className
应该是完全合格的-即com.mycompany.MyClass
它应该是:
Class.forName(String classname)
不确定你在问什么,但是,也许?您可以使用类的forName
方法:
Class cls = Class.forName(clsName);
Object obj = cls.newInstance();
查看关于反射的Java教程教程以了解更多详细信息。您可以通过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对象,我们正在创建该类的新实例
如果对此有任何疑问,请让我知道它抛出的ClassNotFound异常该类不在类路径上,或者您没有传递完全限定的类名,例如com.mycompany.project.className您传递的className
值是多少?你的类路径上有这样一个类吗?是的,这个类在同一个包中。我遇到了与ClassNotFoundException
相同的问题。诀窍是在try-catch中处理异常。类似这样的内容:try{Class cls=Class.forName(“com.company.MyClass”);}catch(ClassNotFoundException ex){/*当字符串无效并且因此无法找到该类时,请执行一些操作来处理该情况*/}
抛出类NotFound Exception如果类在不同的项目中怎么办?我看到没有人回答您的问题。只要编译器知道在哪里查找,它是否在另一个项目中就不重要了。因为您可能正在使用IDE,所以它可能完全取决于IDE。关于引用,您知道您从Java库引用的所有类都不在您的项目中,对吗?但是,编译器知道在哪里查找它们,因为它知道它们是外部引用的。在尝试高级Java编程时,似乎需要学习基本的Java编程:|如果班级在不同的项目中呢?你的评论是:什么!???如果您的类位于不同的项目中,那么它不取决于您的IDE吗?就您的应用程序而言,不管怎么说,它就像是在同一个项目中一样,因为它的库是外部引用的。比如,您知道Java API类不在您的项目中,对吗?但是,如果IDE设置正确,IDE的编译器知道在哪里可以找到它们。这同样适用于来自另一个项目的类。如果类在不同的项目中呢?你能得到该项目的jar文件并指定类名吗?比如class.forName(“oracle.jdbc.driver.OracleDriver”)Bozho的答案可能有更多的要点,但我认为你的答案更具描述性。另外,你为什么叫娟泽???听起来几乎像是西班牙语和汉语的混合体这背后有什么巧妙的含义吗?我正在eclipse中处理一个动态web项目。我正在使用上面的代码获取一个类。但当我使用如下字符串变量时,它返回ClassNotFoundException:string clsName=“com.mydoamin.className”;Class cls=Class.forName(clsName)代码>如果将完全限定的类名硬编码为参数,则一切正常。有什么建议吗?@JuanZe我在寻找其他东西时遇到了这个答案,现在我很好奇。。。这样的转换可以做什么?我正在eclipse中处理一个动态web项目。我正在使用上面的代码获取一个类。但当我使用如下字符串变量时,它返回ClassNotFoundException:string clsName=“com.mydoamin.className”;Class cls=Class.forName(clsName)代码>如果将完全限定的类名硬编码为参数,则一切正常。有什么建议吗?@djthequest如果我们的clsName
变量包含完全限定的类名,那么使用它和硬编码字符串之间应该没有区别。类路径中可能没有所需的类。在启动代码中从同一个jar实例化一个公共类可能会有帮助,以确保库存在于类加载器中。感谢您的响应,但如果我硬编码字符串works fins,则表示类位于类路径中,而不是变量,对吗?后来我发现,Class.forName()
方法需要一个final
变量。一个简单的变量是不起作用的。你能为子类也这样做吗?
The first time calls forName:
static block in AClass
AClass's Constructor
The second time calls forName: