Java泛型

前端之家收集整理的这篇文章主要介绍了Java泛型前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想实现一个方法,该方法将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);

猜你在找的Java相关文章