如何按字符串进行类型转换?

时间:2015-03-18 11:49:05

标签: java type-conversion

我将类型保存在字符串中,如下所示:

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

5 个答案:

答案 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”

这是你想要的吗?