Каковы эквиваленты следующих API Java в GWT? - PullRequest
0 голосов
/ 06 мая 2018

Я пытаюсь скомпилировать Java-программу с GWT, но программа использует несколько API, которые не поддерживаются GWT. Каковы их эквиваленты в GWT?

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

1 Ответ

0 голосов
/ 06 мая 2018

java.util.UUID

Это трудно хорошо эмулировать, по крайней мере, по двум причинам спецификация требует 100 секунд наносекунд (браузеры делают только до миллисекунд, и это грубо, чтобы избежать некоторых атак), а требования к «узлу» не делают действительно имеет смысл в браузере. Эмуляция существует, но, зная, что код, который вы хотите использовать, требует UUID, я бы хотел понять компромиссы, прежде чем выбирать один, чтобы убедиться, что вы не вызываете последующих проблем.

Документация gwt фактически вызывает UUID как класс, для которого вы, возможно, захотите добавить свою собственную эмуляцию: http://www.gwtproject.org/doc/latest/DevGuideOrganizingProjects.html. Это не очень просто, но и не очень сложно, просто требует некоторой работы чтобы правильно настроить.

java.io.PrintWriter

С одной стороны, я не знаю никакой эмуляции для этого, но с другой стороны это не составит большого труда для записи - в основном входящие строки должны быть делегированы какому-либо базовому Writer, что также не эмулировать. Я предполагаю, что это для регистрации какого-то? Возможно, имеет смысл лишь очень грубо эмулировать его и либо выбросить (например, PrintStream в существующем GWT), либо объяснить немного подробнее, посмотреть, не может ли он быть специально создан для того, что вам нужно.

java.util.concurrent. *

GWT компилирует Java в JS, а JS по своей сути однопоточен, поэтому эти классы не имеют большого смысла в GWT. Тем не менее, проект Guava-GWT предоставляет эмуляцию для некоторых из них, и если вы пропустите их, очень просто написать оставшиеся.

java.lang.ThreadLocal

Я не видел этого эмулированного ранее, но, как и выше, было бы невероятно просто написать свою собственную эмуляцию - просто относитесь к ней как к обертке для объекта, так как в любом случае в браузере есть только один поток.

java.lang.ref.WeakReference

Вот проблема для JS - среда выполнения просто не поддерживает эту концепцию. Даже современные JS с WeakMap и WeakSet не могут справиться с этим, они являются очень простыми версиями концепции, к которой мы привыкли в Java. Это единственный элемент в вашем списке, который в настоящее время невозможен, насколько мне известно о браузере.

java.net.URI

Хотя это большой класс, разумно было бы подражать этому, в зависимости от того, что именно вы собираетесь делать дальше - например, toURL(), а затем openConnection() не сработает, но если вы просто используем это как простой конструктор для объектов URL, это выглядит как (относительно новый) объект URL в браузере https://developer.mozilla.org/en-US/docs/Web/API/URL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...