Вопрос по constructor, inner-classes, java – Java - конструктор внутреннего класса - разрешен только для внешнего класса

12

У меня есть внутренний класс в моем коде. Я хочу предоставить публичный доступ к его экземплярам, но только внешний класс должен иметь возможность создавать эти экземпляры, как в «частном» доступе. Возможно ли это без создания небольшого пакета (или создания открытого интерфейса для каждого такого внутреннего класса)?

(Извините, если мой английский плохой: P)

Ваш Ответ

3   ответа
1

если вы хотите получить экземпляр внутреннего класса, вам сначала нужно иметь класс Outer.

A внутренний класс является членом его вмещающего класса.

Вам не нужно ничего делать для этого.

Нестатические вложенные классы (внутренние классы) имеют доступ к другим членам включающего класса, даже если они объявлены закрытыми

Надеюсь, я правильно понял ваш вопрос.

пожалуйстасм.

Конструктор должен быть доступен только для внешнего класса (поэтому не может быть публичным), но должна быть возможность использовать этот объект из внешнего (поэтому класс не может быть закрытым). Krzysztof Stanisławek
24

внутренний класс открытый, но его конструктор частный, Таким образом, вы можете создать его только внутри вашего класса и самого себя, но не снаружи.

Неужели внешний класс имеет доступ к закрытому полю внутреннего класса? Полезно знать, работает ли это, спасибо! Krzysztof Stanisławek
Так что это решение неверно? Krzysztof Stanisławek
Нет, это правильное решение, внешний класс может видеть все приватные поля, методы и конструкторы внутренних классов. WilQu
Хорошо, я проверил, @WilQu и LastFreeNickname, вы правы, спасибо! Krzysztof Stanisławek
0

Так сделайprivate внутреннего класса.

public class Outer {
    private class Inner {}
        public String foo() {
            return new Inner().toString(); 
        }
}

Вы не можете легально вызвать частный конструктор по умолчанию, потому что он является частным

ТолькоOuter объект должен иметь доступ к созданию экземпляровInner, Это теперь ясно? К сожалению :) Krzysztof Stanisławek
Это решение вашего вопросаonly outer class should be able to create this instances, Вы можете уточнить свой вопрос, что вы действительно хотите !! не ясно. bNd
Когда Inner закрыт, я не могу использовать это вне Outer. Я могу сделать публичный интерфейс специфичным для этого класса, но я хочу избежать этого решения, если есть лучшее. Krzysztof Stanisławek

Похожие вопросы