我试图重写调用超类的方法,并将返回的值添加到新集合(因为超类的返回值是不可变的,所以这是必需的)。如何将一个集合的内容添加到新集合
惯用的Java这个如下:
public class JaxrsApplication extends Application {
@Override public Set<Class<?>> getClasses() {
HashSet<Class<?>> classes = new HashSet<>(super.getClasses());
classes.add(PlainTextWriter.class);
classes.add(PageResource.class);
return classes;
}
}
我试图实现科特林没有成功等价物:
public class JaxrsApplication() : Application() {
override fun getClasses(): MutableSet<Class<out Any?>>? {
val classes = hashSetOf<Class<out Any?>>()
classes.addAll(super.getClasses()) // <= compiler error!
classes.add(javaClass<PlainTextWriter>())
classes.add(javaClass<PageResource>())
return classes
}
}
这似乎是在一个类型推断问题addAll函数,但我不知道如何解决它。帮助表示赞赏:-)
对于未来的读者,我在这里混淆的原因是由于错误弹出的类型不匹配:
MutableSet
实现Iterable
,这里的关键是最后的'?' 'Found'行中的字符表示返回的值是可空的。