我有一个代码块,我反序列化传入的数据,然后我必须将其转换为一些已知的类对象,所以为此我做了这样的事情:
if (object instanceof MyClass) {
Myclass data = (MyClass)object;
}
Run Code Online (Sandbox Code Playgroud)
它工作正常,但现在我有一种情况,可能有不同类型的calsses.那么有没有办法根据以下内容进行比较"String":
if (object instanceof "String") {
String data = (String)object;
}
Run Code Online (Sandbox Code Playgroud)
问题是在这种情况下,用户将指定类对象名称,那么我该怎么做呢?
我应该强制用户启动一个虚拟对象,然后传递给我的方法或有没有办法用String初始化null对象,任何想法?
它很臭,很丑,我不喜欢它,但你可以使用Class#forName()和Class#isInstance(Object).
if (Class.forName("java.lang.String").isInstance(object)) {
String data = (String)object;
}
Run Code Online (Sandbox Code Playgroud)
不过,你仍然会遇到演员阵容的问题.Class#cast()只有让你编译时类型安全,当你有一个Class<T>-但你只能得到一个Class<?>从Class#forName().