我有一个代码块,我在其中反序列化传入的数据,然后我必须将其转换为一些已知的类对象,因此我做了类似的事情:
if (object instanceof MyClass) {
Myclass data = (MyClass)object;
}
它工作正常,但现在我的情况可能有不同类型的calsses。那么有没有办法根据"String"
进行比较:
if (object instanceof "String") {
String data = (String)object;
}
问题是在这种情况下,用户将指定类对象名称,那么我该怎么做呢? 我应该强制用户启动一个虚拟对象,然后传递给我的方法,还是有办法用String初始化null对象,有什么想法吗?
答案 0 :(得分:5)
它很臭,很丑,我不喜欢它,但你可以使用Class#forName()
和Class#isInstance(Object)
。
if (Class.forName("java.lang.String").isInstance(object)) {
String data = (String)object;
}
但是,你仍然会遇到演员阵容的问题。 Class#cast()
只有Class<T>
才能获得编译时类型安全性 - 但您只能从Class<?>
获得Class#forName()
。
答案 1 :(得分:2)
您可以使用Class#forName()和Class#isInstance(Object)。完成这个
下载示例代码
FileDemo dd = new FileDemo();
Class object = Class.forName("com.FileDemo");
if(object.isInstance(object)){
//do your conversion
}
答案 2 :(得分:1)
您可以随时执行此操作:
if(object instanceof MyClass)
{
Myclass data = (MyClass)object;
} else
{
String data = object.toString();
}
默认情况下,java中的每个Object
都有一个可以调用的toString
函数。无需转换为String
答案 3 :(得分:0)
请在此处查看“forname”方法:http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html