我将类型保存在字符串中,如下所示:
String cls = "Test";
以下是我尝试的一些代码:
String cls = "Test";
Object obj = new Test();
Test test = (Class.forName(cls)) obj;
但它以编译错误结束:
Main.java:21: error: ';' expected
Test test = (Class.forName(cls)) obj;
如何使用此字符串进行类型转换?
PS:假设我不知道obj
是什么类型,我只有String cls
。
答案 0 :(得分:2)
如果您想要实例化一个您拥有该名称的类,那么您已经走上正轨:
// Remember that this class name tells us, it's in the default package,
// otherwise you would have to use the fully qualified name, for example
// com.mydomain.Test
String className = "Test";
// First we need to get the correct class object
Class<?> clz = Class.forName(className);
// And from this class object, we can create a new instance, in other
// words, a "Test" object:
Test test = (Test)clz.newInstance();
当然,有一些例外情况必须被捕获(或声明)等等。但我认为你明白了。如果你不想调用你的“Test”类的默认构造函数(没有参数,换句话说相当于new Test()
),你必须通过适当的方法搜索正确的构造函数。类对象(getDeclaredConstructor等等。 - 请参阅API文档)。
答案 1 :(得分:1)
您可以对从String创建的类使用cast方法:
String className = "Test";
Class<?> clz = Class.forName(className);
clz.cast(objectToBecasted);
答案 2 :(得分:0)
java.lang.class.Class c=Class.forName("ClassNameToBeLoadedDynamically")
不是必需的
对Class.forName(“X”)的调用会导致名为X的类 动态加载(在运行时)。
您可以直接使用
Test test = (Test) obj;
答案 3 :(得分:0)
确定,
试试这个:
Test test = (Test) Class.forName(cls).cast(obj);
答案 4 :(得分:0)
String cls = "Test";
Test t = new Test();
OtherTest ot = new OtherTest();
Class<?> c = Class.forName(cls);
if(t.getClass() == c) {
System.out.println("Hooray!");
}
if(ot.getClass() == c) {
System.out.println("Mmmmh");
}
打印出“Hooray”
这是你想要的吗?