Проблему, которую я локализовал и воспроизвел простым способом:
Версия Kotlin: 1.9.23
Это EntityId, который представляет собой класс встроенного значения
p>
Код: Выделить всё
@JvmInline
value class EntityId(val id: UUID)
Код: Выделить всё
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");
}
}
Я пытаюсь скомпилировать проект с помощью 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]
Есть ли способ правильно избежать такой проблемы? (Создание мостов, адаптеров или прокси-сервера невозможно.)
Примеры кода/конфигурации приветствуются.
Подробнее здесь: https://stackoverflow.com/questions/787 ... interfaces
Мобильная версия