如何替换 Java 20 中已弃用的 URL 构造函数?

gou*_*sej 8 java java-20

Java 20 中已弃用所有 URL 构造函数。我替换new URL(protocol, host, file)为,new URI(protocol, host, file, null).toURL()因为我没有查询,也没有片段,但我不知道如何处理其他内容:

/home/gouessej/Documents/programmation/java/workspace/Ardor3D/ardor3d-core/src/main/java/com/ardor3d/util/UrlUtils.java:40: warning: [deprecation] URL(String) in URL has been deprecated
        return new URL(new URL(url), relativeLoc);
                       ^
/home/gouessej/Documents/programmation/java/workspace/Ardor3D/ardor3d-core/src/main/java/com/ardor3d/util/UrlUtils.java:40: warning: [deprecation] URL(URL,String) in URL has been deprecated
        return new URL(new URL(url), relativeLoc);
               ^
/home/gouessej/Documents/programmation/java/workspace/Ardor3D/ardor3d-core/src/main/java/com/ardor3d/util/resource/SimpleResourceLocator.java:94: warning: [deprecation] URL(URL,String) in URL has been deprecated
            final URL rVal = new URL(_baseDir.toURL(), spec);
                             ^
/home/gouessej/Documents/programmation/java/workspace/Ardor3D/ardor3d-audio/src/main/java/com/ardor3d/audio/FilenameURL.java:125: warning: [deprecation] URL(String) in URL has been deprecated
                    url = new URL( filename );
Run Code Online (Sandbox Code Playgroud)

会简单地new URI(filename).toURL()完成最后一种情况的工作吗?

当我比较 Java 文档中的措辞时,我了解到 URI 方案或多或少意味着 URL 协议,URI 主机是 URL 主机,URL 文件与 URI 路径和可选的 URI 查询相匹配。new URL(spec)和的精确等价物是什么new URL(context, spec)?

我准备了一些建议的更改,但它不起作用,抛出了 IllegalArgumentException。

Bas*_*que 18

太长了;博士

\n
    \n
  • 要构造 URL,请使用URI::toURL.
  • \n
  • 要构造相对 URL,首先URI使用上下文 URI 创建,然后URI::resolve使用您希望设为相对的 URI 进行调用。
  • \n
  • 要构建file:基于 URL,(1) 调用Path::toURI,(2) 然后URI::toURL。
  • \n
\n

前任:URI uri = Paths.get( "/Users/your_user_name/example.txt" ).toUri() ;

\n

细节

\n

明白:

\n
    \n
  • java.net.URL是一个古老的类,可追溯到 Java 1。该类不根据RFC 2396转义机制对任何 URL 组件进行编码或解码。
  • \n
  • java.net.URI类后来出现在 Java 4 中。
  • \n
\n

阅读 Java 团队Oracle 的这篇说明:质量推广注意事项 - JDK 20:弃用 URL 公共构造函数。去引用:

\n
\n

JDK 20 将弃用 java.net.URL 的所有公共构造函数。\xe2\x80\xa6 要构造 URL,URI::toURL应首选替代方案。要构建file:基于 URL,Path::toURI应先于URI::toURL.

\n
\n

请参阅类的 Javadoc 中关于构造函数弃用的注释URL。

\n

另请参阅问题跟踪器页面JDK-8294241 弃用 URL 公共构造函数。

\n

示例:文件路径 URI

\n

要在现代 Java 中处理文件,请使用NIO.2功能。

\n

类Paths可以产生一个Path对象。从那里,要求Path生成一个URI.

\n
Path path = Paths.get( "/Users/your_user_name/example.txt" ) ;\nURI uri = path.toUri () ;\nSystem.out.println ( "uri = " + uri );\n
Run Code Online (Sandbox Code Playgroud)\n
\n

uri = 文件:///Users/your_user_name/example.txt

\n
\n

走向另一个方向:

\n
Path path = Paths.get( uri ) ;\n
Run Code Online (Sandbox Code Playgroud)\n

  • 例如 `var url = URI.create("https://www.example.com").toURL();` (2认同)