我想实现一个方法,该方法将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);