Java 中泛型强制转换操作的使用

问题描述 投票:0回答:1

考虑以下代码片段:

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)
    并没有起到任何作用。
generics casting type-parameter jls
1个回答
0
投票

如果你说

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;

会起作用的。

© www.soinside.com 2019 - 2024. All rights reserved.