【问题标题】:Upgrading to Java 11 from Java 8 - package sun.util does not exist从 Java 8 升级到 Java 11 - 包 sun.util 不存在
【发布时间】:2018-10-17 04:00:07
【问题描述】:

我正在尝试将应用程序从 Java 8 迁移到 Java 11。当我尝试在 IntelliJ 中构建项目时出现package sun.util does not exist 错误?

有什么想法吗?

谢谢!

【问题讨论】:

  • Oracle bought sun 在 2010!
  • 取决于 sun.* 类总是危险且脆弱的,因为它们可以随时更改或删除。 javac 已经在许多版本中发出了关于此的警告。您使用的是哪个 sun.util.* 类?只是想知道您是否可以使用标准 API。
  • 我使用ResourceBundleEnumeration 来实现我们自己的ResourceBundle。但我已经找到了一种使用 new Vector<>(keySet).elements() 的方法,这似乎可行。

标签: java java-8 java-11


【解决方案1】:

包com.sun.* 和sun.* 包含内部内容,一般情况下不应由第三方应用程序(可能像您的应用程序)使用。

由于在 java 9 中引入了模块系统,现在 Oracle 甚至在编译时“保护”这些包。

因此,显而易见的方法是摆脱代码中的这种依赖关系。 他们为什么要保护?因为他们留给自己改变这些东西的权利,正如我所说的,它被认为是内部的。

加法:

您可以尝试(我不推荐)应用this great article 中的一些“解决”工具(阅读“非法访问内部 API”一章),但正如本文作者所说,最直接的方法是停止在您的代码中使用这些包,因此将其视为第一个赌注。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-06
    • 2020-03-09
    • 2021-05-20
    • 1970-01-01
    • 2014-05-02
    • 1970-01-01
    相关资源
    最近更新 更多