【发布时间】:2019-04-01 10:19:00
【问题描述】:
我是 Kotlin 的新手,正在尝试使用该语言编写一些项目。 我正在使用 Java 库并从我的项目中的库中扩展一个类,我看到了这个错误消息。
'public' function exposes its 'public/*package*/' return type argument FooSettings
我知道问题是,但我不确定如何在 Kotlin 中解决它,因为我仍在尝试熟悉 Kotlin。
我可以看到 Kotlin 很聪明,只尝试返回扩展 FooSettings 的类型。但是问题是 FooSettings 仅是公共包,这意味着如果在我的 Kotlin 项目中,我无法访问。
我对 Kotlin 泛型和 in 或 out 的使用进行了一些研究,但我无法解决问题。
我可以在我的 Kotlin 项目中做些什么来解决我看到的错误?
代码 sn-p
这是 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
【问题讨论】:
标签: java generics kotlin extends