Как создать экземпляр двухстороннего нестати c класса внутри внешнего класса? - PullRequest
0 голосов
/ 13 апреля 2020
public class Foo {
    private String myString;
    private Bar instanceOfNested;

    public Foo() {
        this.myString = "Hello, World!";
        this.instanceOfNested = new Bar.Ham();
    }

    public abstract class Bar {
        public class Ham extends Bar {
            public Ham() {
                System.out.println(Foo.this.myString);
            }
        }
    }
}

Вышеприведенное выдает ошибку:

"требуется включающий экземпляр, содержащий Foo.Bar.Ham"

Я также пытался сделать this.instanceOfNested = this.new Foo.Bar.Ham() и this.instanceOfNested = this.new Bar.Ham(), однако, оба результата приводят к тому, что IDEA предоставляет сообщение «Невозможно разрешить символ« Foo »» и «Невозможно разрешить символ« Бар »соответственно (хотя компиляция возвращает« Ошибка: »(« ожидается ». это потому, что он ожидает конструктор, из которого находится Bar в операторе? Bar должен быть абстрактным и, следовательно, не может быть создан, однако).

Насколько я понимаю, такое утверждение, как new Foo().new Bar.Ham(), является требуется, однако, поскольку я создаю экземпляр из Foo, я пытаюсь использовать this.

Можно ли создать экземпляр Ham в Foo, сохраняя Bar как абстрактные и нестати c, так и Ham как нестати c и вложенные в Bar?

...