如何避免引用了jdk高版本api被编译成低版本误用

2025-06-23 11:22:43

1、出现错误的情况一般都是引用到超过目标版本的api类和方法,为了演示如何解决,首先需要构造引用高版本的例子。首先看下ConcurrentHashMap类的mappingCount方法,这个方法是在jdk1.8版本添加的

如何避免引用了jdk高版本api被编译成低版本误用

3、在cmd命令下输入:javac -source 1.7 -target 1.7 Test.java,此时没有添加-bootclasspath参数,会出现以下警告信息,警告: [options] 未与 -source 1.7 一起设置引导类路径,但还是可以正常编译

如何避免引用了jdk高版本api被编译成低版本误用

5、解决方法就是,在1.8编译class的时候,带上-bootclasspath参数,然后值路径是1.7的引导类rt.j锾攒揉敫ar。输入命令:javac -bootclasspath E:\rt1.7.jar -source 1.7 -target 1.7 Test.java,此时发现编译的时候就提示错误了,不能编译成功。这样的话,提早暴露了错误,不会存在误用的情况

如何避免引用了jdk高版本api被编译成低版本误用

7、切换到1.8的ConcurrentHashMap类的keySet方法,则可以看到返回值变成了KeySetView

如何避免引用了jdk高版本api被编译成低版本误用

9、如果编译的时候没有带上执行bootclasspath参数,同样可以正常编译通过,但运行的时候发现,报错了。其实这个源码文件本身是没有问题的,可以在1.8和1.7下运行,只是编译的时候没有带上bootclasspath正确的引导jar,使用javac -bootclasspath E:\rt1.7.jar -source 1.7 -target 1.7 Test.java编译之后再次放到1.7下运行,发现可以正常运行了

如何避免引用了jdk高版本api被编译成低版本误用
声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢