2

我有一个代码块,我在其中反序列化传入的数据,然后我必须将其转换为一些已知的类对象,因此我做了这样的事情:

   if (object instanceof MyClass) {
         Myclass data = (MyClass)object;  
   }

它工作得很好,但是现在我遇到了一种情况,可能会有不同类型的课程。那么有没有办法根据以下内容进行比较"String"

   if (object instanceof "String") {
         String data = (String)object;  
   }

问题是在这种情况下,用户将指定类对象名称,那么我该怎么做呢?
我应该强制用户启动一个虚拟对象,然后传递给我的方法,还是有办法用字符串初始化空对象,有什么想法吗?

4

4 回答 4

5

它又臭又丑,而且我不喜欢它,但你可以使用Class#forName()and Class#isInstance(Object)

if (Class.forName("java.lang.String").isInstance(object)) {
     String data = (String)object;  
}

不过,你仍然会在演员阵容方面遇到问题。Class#cast()只有当你有 a 时才能获得编译时类型安全Class<T>——但你只能得到 a Class<?>from Class#forName()

于 2013-03-08T17:59:03.193 回答
2

您可以使用Class#forName()Class#isInstance(Object)。要做到这一点

这是一个示例代码

FileDemo dd = new FileDemo();
Class object = Class.forName("com.FileDemo");

if(object.isInstance(object)){
    //do your conversion
}
于 2013-03-08T18:05:41.973 回答
1

你总是可以这样做:

if(object instanceof MyClass)  
{
             Myclass data = (MyClass)object;  
} else  
{  
       String data = object.toString();
}  

默认情况下Object,java 中的 each 都有一个toString可以调用的函数。没有必要强制转换为String

于 2013-03-08T17:58:07.710 回答
0

请参阅此处的“forname”方法:http: //docs.oracle.com/javase/7/docs/api/java/lang/Class.html

于 2013-03-08T17:58:42.420 回答