从Java 7迁移到Java 8 – 编译错误

前端之家收集整理的这篇文章主要介绍了从Java 7迁移到Java 8 – 编译错误前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
以下代码在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.

猜你在找的Java相关文章