【发布时间】:2014-10-08 17:39:01
【问题描述】:
我进行了以下 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 是在编译时评估的,但 .getClass() 是在运行时评估的。
-
编译器应该警告你使用原始类型
Class而不是参数化类型Class<>,这将暗示你的声明有问题。
标签: java class generics casting