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); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |