尽管IntelliJ IDE不会给我任何警告,但是此两行方法会导致编译错误Error:(12, 37) java: incompatible types: byte[] cannot be converted to int
:
import java.math.BigInteger;
public class Test {
public static void main(String[] args){
String foo = "123";
new BigInteger(foo.getBytes(), 1, 1);
}
}
在JDK 11中,有一个带有此签名public BigInteger(byte[] val, int off, int len)
的有效构造函数(java.math.BigInteger的306行),但在JDK 8中却没有。我能够直接使用javac
编译JDK 11,但是它与预期的JDK 8一起失败。我已经将IntelliJ配置为使用JDK 11,但是我不知道为什么它使用的是旧版本... System.out.println(System.getProperty("java.version"))
打印11.0.1
。好像它是用JDK 8编译并用JDK 11运行。
我检查了是否在以下位置选择了JDK 11:
我正在使用IntelliJ IDEA 2018.2.6 (Community Edition)
。重新启动IntelliJ后问题仍然存在。
编辑:
项目使用Maven
答案 0 :(得分:2)
出现类似问题的因素很少,主要是由于使用了其他工具(例如maven或gradle)造成的。
仅使用IDE编译和运行代码时,应该没有问题(因为使用的Java版本已完全配置)。
可以将构建工具(maven,gradle)设置为使用与在IDE中配置的Java不同的Java版本。
要查看那些在终端中运行的工具所使用的版本:
gradle -version
mvn -version
输出应包含使用这些工具配置的Java版本。
他们的Java版本主要使用JAVA_HOME
环境变量,该变量指向JRE / JDK的位置。
如果构建工具使用不同的Java版本来编译源代码,则启动应用程序的版本可能会导致此类错误和异常。
这些问题与Java8和更高版本之间标准API的更改有关。
更改JAVA_HOME
变量的值以指向Java11文件夹应该可以完成工作,但是如果仍然需要旧版本,那么例如在使用Maven时,可以使用插件:
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.11</source>
<target>1.11</target>
</configuration>
</plugin>