1.编译时报错
2.原因
2.1 Java中的Diamond运算符
在Java 7之前创建泛型对象,需要重复指定泛型类型。如:
FutureTask<String> futureTask = new FutureTask<String>(thread);
这不仅增加了代码的冗余,也增加了阅读和维护代码的难度。为了解决这个问题,Java 7引入了Diamond运算符(<>),它允许我们在创建泛型对象时省略类型参数。然而,需要注意的是,Java 7的Diamond运算符有一个限制:在-source 1.5的设置下,不支持Diamond运算符的使用。
2.2 Diamond运算符的使用
示例:
FutureTask<String> futureTask = new FutureTask<>(thread);
在上面的代码中,创建了一个futureTask对象,并使用Diamond运算符省略了第二个FutureTask<>中的类型参数。在这种情况下,编译器会根据变量的声明类型自动推断出类型参数。
2.3 Diamond运算符的限制
Diamond运算符在Java 7的-source 1.5设置下是不支持的。这是因为在Java 7之前的版本中,Java编译器无法正确地推断泛型类型参数。因此,在这种设置下,尝试使用Diamond运算符会导致编译错误。
3.解决
在网上找了三种方案,第一种不行,第二种没试,第三种解决了我的问题 。
3.1 第一种
在File->Setting中设置如下:
然后检查:File->Project Structure里面的相关配置:
3.2 第二种
在pom.xml文件中添加
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
3.3 第三种
在File->Setting->Build->Build Tools->Maven下找到你的maven的配置文件地址,然后根据地址在maven安装目录下找到settings.xml文件,检查配置文件中是否设置了全局jdk版本,如没有,则设置如下:
<profiles>
<profile>
<id>jdk1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
</profiles>