Я новичок в Kotlin и пытаюсь написать какой-нибудь проект, используя язык.
Я использую библиотеку Java и расширяю класс из библиотеки в своем проекте, и я вижу это сообщение об ошибке.
'public' function exposes its 'public/*package*/' return type argument FooSettings
Я понимаю, что проблема в том, но я не уверен, как это исправить в Kotlin, так как я все еще пытаюсь познакомиться с Kotlin.
Я вижу, что Котлин умен и только пытается вернуть тип, который расширяет FooSettings
. Однако проблема в том, что FooSettings
является общедоступным пакетом, что означает, что я не могу получить доступ, если в моем проекте Kotlin.
Я провел некоторое исследование об общих дженериках Kotlin и использовании in
или out
, но не смог решить проблему.
Есть ли какая-нибудь работа, которую я могу сделать в своем проекте Kotlin, чтобы исправить ошибку, которую я вижу?
Фрагмент кода
Это пример класса библиотеки Java:
Обратите внимание, у меня нет возможности изменить реализацию библиотеки. Я должен использовать эту библиотеку и расширить ее в Kotlin.
Мне кажется странным, что библиотека java написана таким образом и ожидает, что она будет переопределена, но это вопрос для другого дня.
import java.util.Collections;
import java.util.List;
public abstract class ClassA {
public List<FooBuilder<?>> getBuilder(Foo foo) {
return Collections.emptyList();
}
}
public class Foo {
}
public abstract class FooBuilder<U extends FooBuilder.FooSettings> {
// implementation of Class
abstract static class FooSettings {
// implementation of Class
}
}
Обычно классы Java переопределяют метод следующим образом:
import java.util.List;
public class MyJavaClassA extends ClassA {
@Override public List<FooBuilder<?>> getBuilder(final Foo foo) {
// implementation
}
}
Но я пытаюсь писать на Kotlin так, чтобы это выглядело как : Напомним, что этот Kotlin зависит от библиотеки Java и не имеет доступа к открытым классам пакета.
class MyKotlinClassA : ClassA() {
override fun getBuilder(foo: Foo): MutableList<FooBuilder<*>> {
// implementation
}
}
Это вызывает ошибку
'public' function exposes its 'public/*package*/' return type argument FooSettings