加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java泛型

发布时间:2020-12-14 23:35:24 所属栏目:Java 来源:网络整理
导读:我想实现一个方法,该方法将Object作为参数,将其转换为任意类型,如果失败则返回null.这是我到目前为止所拥有的: public static void main(String[] args) { MyClass a,b; a = Main.MyClassstaticCast(new String("B"));}public static class MyClass {}publi
我想实现一个方法,该方法将Object作为参数,将其转换为任意类型,如果失败则返回null.这是我到目前为止所拥有的:
public static void main(String[] args) {
    MyClass a,b;
    a = Main.<MyClass>staticCast(new String("B"));
}

public static class MyClass {
}

public static <T> T staticCast(Object arg) {
    try {
        if (arg == null) return null;
        T result = (T) arg;
        return result;
    } catch (Throwable e) {
        return null;
    }
}

不幸的是,类型强制转换异常永远不会被抛出/捕获到staticCast()函数的主体中.似乎Java编译器生成函数String staticCast(Object arg),其中有一行String result =(String)arg;即使我明确地说模板类型应该是MyClass.有帮助吗?谢谢.

解决方法

因为泛型类型信息在运行时被擦除,所以转换为泛型类型的标准方法是使用Class对象:
public static <T> T staticCast(Object arg,Class<T> clazz) {
    if (arg == null) return null;
    if (!clazz.isInstance(arg))
        return null;
    T result = clazz.cast(arg);
    return result;
}

然后像这样称呼它:

a = Main.staticCast("B",MyClass.class);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读