考虑以下代码片段:
public static <T> T convertInstanceOfObject(Object o) {
try {
T rv = (T)o;
return rv;
} catch(java.lang.ClassCastException e) {
return null;
}
}
T rv = (T)o;
行显示我们正在将 Object 类型的对象转换为 T 类型。(T)
类型时需要指定冗余的 Object
?T rv = o;
,编译器也会理解同样的事情。
当 T rv = (T)o;
被用作强制转换操作符时,语句 (T)
并没有起到任何作用。如果你说
Object o = new Object(); String s = (String) o;
您将得到一个 ClassCastException,因为 o 尚未被创建为 String,并且 String 不是 Object 的超类。
如果你说
String s = new String(); Object o = (Object) s;
这会起作用。 o 被称为“对象”,但附加了信息,它已被创建为字符串。所以
String s = new String(); Object o = (Object) s; String ss = (String) o;
会起作用的。