我有以下 3 个测试。前两个有效,最后一个无效。我问这个问题的动机是我希望能够转换对象 A
以便它与对象 B
具有相同的类,当 A
已知是 B
的子类型。
@Test
public void testWorks() {
Object bar = "foobar";
String blah = (String) bar;
System.out.println(blah); // Outputs foobar
}
@Test
public void testAlsoWorks() {
Object bar = "helloworld";
String blah = String.class.cast(bar);
System.out.println(blah); // Outputs helloworld
}
@Test
public void testfails() {
Object bar = "foobar";
String thetype = "hello";
Class stringclass = thetype.getClass();
String blah = stringclass.cast(bar); // Compiler error: incompatible types: Object cannot be converted to String
System.out.println(blah);
}
谁能解释为什么前两个案例成功时最后一个案例失败,为什么会这样?实现这一目标的更好方法是什么?
最佳答案
需要指定Class
的类型参数:
Class<String> stringclass = (Class<String>) thetype.getClass();
或
Class<? extends String> stringclass = thetype.getClass();
java.lang.Class.cast(Object obj)
将一个对象转换为该 Class 对象表示的类或接口(interface)。
如果不指定类型,您就不会告诉编译器 Class
实例 stringclass
代表什么类或接口(interface)。
当您调用 String.class
时,Class
对象被隐式参数化为 String
类型。
关于java - 为什么基于 Class.class 的转换有效但 getClass 无效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26263048/