GWT 中以下 Java API 的等效项是什么?

What are the equivalent of the following Java APIs in GWT?

我正在尝试使用 GWT 编译 java 程序,但该程序使用了多个 GWT 不支持的 API。这些在 GWT 中的等价物是什么?

java.util.UUID
java.io.PrintWriter
java.util.concurrent.*
java.lang.ThreadLocal
java.lang.ref.WeakReference
java.net.URI

java.util.UUID

这很难很好地模拟,至少出于两个原因,规范要求 100 纳秒(浏览器最多只能做到几毫秒,这对于避免某些攻击来说很粗糙),以及 "node" 在浏览器中没有真正意义。仿真确实存在,但知道您希望使用的代码需要 UUID 会让我想在选择一个之前了解权衡,以确保您不会造成以后的问题。

gwt 文档实际上将 UUID 称为 class,您可能希望为 http://www.gwtproject.org/doc/latest/DevGuideOrganizingProjects.html 添加自己的仿真。这不是很容易,但也不是真的很难,只是需要一些工作才能正确设置。

java.io.PrintWriter

一方面,我知道没有对此进行仿真,但另一方面,编写起来并不难——大部分传入的字符串需要委托给一些底层 Writer,这也不是'模仿。我假设这是为了某种记录?可能只非常粗略地模拟它并丢弃它(如现有 GWT 中的 PrintStream),或者多解释一点,看看它是否不能为您的需要而构建。

java.util.concurrent.*

GWT 将 Java 编译为 JS,而 JS 本质上是单线程的,因此这些 classes 在 GWT 中没有多大意义。也就是说,Guava-GWT 项目为其中的几个提供了仿真,如果您缺少任何一个,编写剩余的非常简单。

java.lang.ThreadLocal

我以前没见过这个模拟,但如上所述,编写自己的模拟将非常简单 - 只需将其视为对象的包装器,因为无论如何浏览器只有一个线程。

java.lang.ref.WeakReference

这是 JS 的问题 - 运行时根本不支持这个概念。即使是带有 WeakMap 和 WeakSet 的现代 JS 也无法处理这个问题,它们是我们在 Java 中习惯的概念的非常简单的版本。根据我对浏览器的了解,这是您列表中目前唯一不可能的项目。

java.net.URI

虽然这是一个很大的 class,但模仿它应该是合理的,具体取决于您下一步要做什么 - 例如,toURL() 然后 openConnection()不会起作用,但如果您只是将其用作 URL 对象的简单构建器,它看起来很像浏览器中的(相对较新的)URL 对象 https://developer.mozilla.org/en-US/docs/Web/API/URL .