Изначально (т. Е. На первом этапе миграции) я бы сказал, что вы не хотите экспортировать API (интерфейс / публичный метод и т. Д.) С трудной в использовании конструкцией скалы из Java.
На практике я бы ограничил это экспортом чего-либо специфичного для scala (опять же, я говорю о первом этапе миграции здесь):
- библиотечные классы scala (типы функций, коллекциии т. д.)
- сигнатуры генерических типов высшего рода
- имплициты
Так что же остается?Что ж, внутренние компоненты классов (частные методы, поля и т. Д.) Можно преобразовать для использования конструкций scala и библиотечных классов.
Если у вас есть какие-либо API-интерфейсы (особенно API-интерфейсы, ориентированные на клиента, которые вы собираетесь перенести), я бы сказал,спроектировать их заново с нуля в Scala;изначально используя Java-бэкэндТогда я бы медленно поел в коде между ними.
Из пунктов, которые вы подчеркнули, я бы согласился, что неизменная парадигма Scala и изменяемая парадигмаЯва не смешивается хорошо.Другие пункты, которые я нашел менее проблематичными.
Другой основной момент несоответствия парадигмы - как преобразовать любой параллельный код, который у вас есть (то есть тот, который использует java.util.concurrent
).Это, конечно, может быть преобразовано как , но вопрос заключается в том, следует ли заменить модель параллелизма, основанную на блокировке, моделью, основанной на актерах или STM .В любом случае это также может быть полная модернизация, в отличие от преобразования как такового .