无法将IntelliJ配置为使用Java 11
尽管IntelliJ IDE没有给我任何警告,但这个两行方法会导致编译错误无法将IntelliJ配置为使用Java 11,java,maven,intellij-idea,compiler-errors,intellij-14,Java,Maven,Intellij Idea,Compiler Errors,Intellij 14,尽管IntelliJ IDE没有给我任何警告,但这个两行方法会导致编译错误错误:(12,37)java:不兼容类型:byte[]无法转换为int: import java.math.BigInteger; public class Test { public static void main(String[] args){ String foo = "123"; new BigInteger(foo.getBytes(), 1, 1); } }
错误:(12,37)java:不兼容类型:byte[]无法转换为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 biginger(byte[]val,int off,int len)
(java.math.biginger的第306行),但在JDK 8中没有。我可以直接用javac
为jdk11编译它,但在使用jdk8时正如预期的那样失败了。我已经将IntelliJ配置为使用JDK 11,但我不知道为什么它使用的是旧版本System.out.println(System.getProperty(“java.version”)
prints11.0.1
。看起来它是用JDK 8编译的,用JDK 11运行的
我已检查是否在以下位置选择了JDK 11:
- 运行/调试配置>JRE
- 项目结构>项目>项目SDK
- 项目结构>项目>项目语言级别
- 项目结构>模块>语言级别
项目使用maven类似问题的因素可能很少,主要由正在使用的其他工具(如maven或gradle)引起 当只使用IDE编译和运行代码时,应该没有问题(因为使用的Java版本已经完全配置) 构建工具(maven、gradle)可以设置为使用不同于IDE中配置的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>
maven编译器插件
1.11
1.11
在我的原始代码中,我有一个以64为基数编码的数字,我得到了相同的问题,我只是简化了问题。你的代码没有意义。如果要将字符串转换为BigInteger,请使用新建BigInteger(字符串)
。看看javadoc:接受byte[]
的构造函数应该是一个“包含BigInteger的二元补码二进制表示的字节子数组”,而不是字符串编码的字节数组。适用于JDK 11。