Проблема совместимости Kotlin с реализацией интерфейсовJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Проблема совместимости Kotlin с реализацией интерфейсов

Сообщение Anonymous »

Я работаю над переносом веб-проекта с Java на Kotlin. Во время этого процесса я столкнулся с проблемой компиляции, которая может создать проблемы в будущем, особенно если существующие проекты должны повторно использовать компоненты Kotlin.
Проблему, которую я локализовал и воспроизвел простым способом:
Версия Kotlin: 1.9.23
Это EntityId, который представляет собой класс встроенного значения
p>

Код: Выделить всё

@JvmInline
value class EntityId(val id: UUID)
и интерфейс Kotlin, содержащий абстрактную функцию с EntityId

Код: Выделить всё

interface KotlinInterface {

fun findById(id: EntityId): T
}
Я пытаюсь реализовать этот интерфейс на
Java (поскольку Java не поддерживает классы значений Kotlin, компилятор ожидает тип UUID вместо EntityId) ):

Код: Выделить всё

public class JavaImpl implements KotlinInterface {

@Override
public Entity findById(@NotNull UUID id) {
return new Entity(id, "Some name");
}
}
Среда IDE не обнаруживает никаких проблем и ошибок не сообщается.
Я пытаюсь скомпилировать проект с помощью Maven и получаю следующее:
p>

Код: Выделить всё

[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  22.602 s
[INFO] Finished at: 2024-07-06T12:48:51+04:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.11.0:compile (compile) on project kotlin-interpolation: Compilation failure: Compilation failure:
[ERROR] .../kotlin-interpolation/src/main/kotlin/com/example/JavaImpl.java:[9,8] com.example.JavaImpl is not abstract and does not override abstract method findById-WQTzO-4(java.util.UUID) in org.example.com.example.KotlinInterface
[ERROR] .../kotlin-interpolation/src/main/kotlin/com/example/JavaImpl.java:[11,5] method does not override or implement a method from a supertype
[ERROR] .../kotlin-interpolation/src/main/kotlin/com/example/JavaImpl.java:[13,16] Entity(java.util.UUID,java.lang.String) has private access in org.example.com.example.Entity
[ERROR] -> [Help 1]
Проект воспроизведения проблемы вы можете найти здесь: github: Проблема интерполяции Kotlin
Есть ли способ правильно избежать такой проблемы? (Создание мостов, адаптеров или прокси-сервера невозможно.)
Примеры кода/конфигурации приветствуются.

Подробнее здесь: https://stackoverflow.com/questions/787 ... interfaces
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»