public abstract class AbstractFoo {
protected AbstractFoo(Builder builder) { /*...*/ }
protected static abstract class Builder { /*...*/ }
}
Там же сделали несколько реализаций таким образом
public class ConcreteFoo extends AbstractFoo {
protected ConcreteFoo(Builder builder) {
super(builder);
/*...*/
}
public static Builder builder() { return new Builder(); }
public static class Builder extends AbstractFoo.Builder { /*...*/ }
}
Как видно из определения public класс ConcreteFoo.Builder наследуется
от protected класса AbstractFoo.Builder. По всей видимости это
является валидным в Java
Но вот в Kotlin следующий код не компилируется
class KFoo
private constructor (builder: Builder) : AbstractFoo(builder) {
// 'public' subclass exposes its 'protected (in AbstractFoo)' supertype Builder
class Builder : AbstractFoo.Builder()
}
Сталкивался кто-либо с подобным?
Ну да, всё так
Обсуждают сегодня