以下代码在JDK7中使用
javac编译两种测试方法,但JDK8只编译willCompile方法.
willNotcompile的错误是:
“Klasa类型中的方法方法(Class< T>)不适用于参数(Class).”
@Test public void willCompile() throws InstantiationException,illegalaccessexception { Class klass = getobject(Class.class); method(klass); } @Test public void willNotCompile() throws InstantiationException,illegalaccessexception { method(getobject(Class.class)); } <T> ResponseEntity<T> method (Class<T> klasa) { return new ResponseEntity<T>(HttpStatus.OK); } public static <T> T getobject(Class<T> clazz) throws illegalaccessexception,InstantiationException { return clazz.newInstance(); }
解决方法
以上编译是因为它使用的是rawTypes.
底部的不是因为你的方法只接受一个Class< T>,但是你给了它一个Class.使用反射,您不能指定类的泛型类型,因此getobject将返回原始的Class对象.
method((Class<?>)getobject(Class.class));
但是,虽然此解决方案解决了运行时问题,但您仍然无法创建新的Class实例.
JDK 7在此比较中不那么严格,并将返回结果Class转换为Class<?>.在幕后所以代码被允许编译.
根据Holger JDK 7关闭整行的泛型类型,并使用原始类型作为返回结果,这意味着该方法获取一个Class并返回一个ResponseEntity.
原文地址:https://www.jb51.cc/java/129422.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。