Возможно ли, чтобы интерфейс имел уже инстанцированный объект в качестве атрибута? - PullRequest
0 голосов
/ 05 апреля 2020

Я создаю интерфейс со многими реализующими классами и есть атрибут, который они все должны иметь; Я думаю, что лучше поместить этот атрибут в их интерфейс, чем писать много строк конструктора, но атрибуты могут быть только stati c final и требуют немедленной инициализации.

public interface Interface{

     static final AttrType attribute = new AttrType( *something* ); 

У меня 2 проблемы: этот атрибут является классом, и его конструктору нужны некоторые другие параметры типа, а не только целочисленные значения, и здесь его также не следует инициализировать. Мне нужны все реализующие классы интерфейса для работы с одним и тем же экземпляром AttrType, который, как я сказал, не будет создавать экземпляр в интерфейсе.

Итак, поскольку я не достаточно опытен, есть ли способ сделать это в интерфейсе, или мне просто нужно написать строку в конструкторе каждого подкласса, чтобы поместить в один экземпляр AttrType, который им нужен

Ответы [ 2 ]

0 голосов
/ 05 апреля 2020

Java интерфейсы описывают, что может делать класс, а не что такое класс. Поэтому интерфейс описывает только методы.

Вы можете справиться с этим несколькими способами:

Используя интерфейс, вы можете получить метод получения переменной, который заставит реализующие классы иметь переменная. Что-то вроде "publi c AttrType getAttribute ();"

Или вы можете создать класс, возможно абстрактный, который реализует интерфейс и имеет переменную, а также ее методы получения и установки. Все подклассы будут наследовать эту переменную и поведение.

0 голосов
/ 05 апреля 2020

Можно ли добавить к go общий базовый класс с вашим общим интерфейсом, который могут наследовать все классы? Тогда общий конструктор базового класса может содержать экземпляр атрибута. Также вы можете рассмотреть возможность использования абстрактного класса вместо интерфейса.

...