Джава; Доступ к переменным экземпляра члена из другого класса - PullRequest
0 голосов
/ 12 августа 2010

У меня есть следующая структура:

public class A {
     private javax.swing.JLabel fullName;

     public class B {
             public B() {
                    fullName.setText("Martha Stewart");
             }
     }
     ...
     ...
     ...
}

Моя цель состоит в том, чтобы B (в настоящее время подкласс A) находился в отдельном классе.

Проблема в том, что когда я разделяю два класса, я теряю функциональность при вызове .setText () для JLabel. Я понимаю, что если B находится в отдельном классе, я должен был бы написать метод публичного сеттера в классе A.

Это, однако, невозможно, так как у меня есть около 100 кнопок и я использую 4-5 различных функций для каждой кнопки. Создание метода получения / установки для каждой функции не представляется возможным ИМХО.

Я пытаюсь обернуть голову вокруг лучшего решения ... кто-нибудь из вас может помочь, друзья?

Ответы [ 2 ]

2 голосов
/ 12 августа 2010

Не позволяйте классу изменять атрибут другого класса, это нарушает инкапсуляцию. Если вы не можете получить геттеры и сеттеры, я бы предложил объект конфигурации (например, карту), который мог бы быть предоставлен конструктору и / или установщику вашего основного класса GUI.

Кстати:

у меня около 100 кнопок

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

2 голосов
/ 12 августа 2010

B не подкласс A. Это вложенный (внутренний) класс в A.

Однако вы не должны пытаться получить доступ к полям других типов - это нарушает инкапсуляцию. Свойства - более хорошее решение - или, альтернативно, метод setFullNameText, который вызывает сам fullName.setText(). То, что у вас есть 100 кнопок (ой!), Не означает, что пришло время выбросить инкапсуляцию из окна. Это означает, что вы можете рассмотреть возможность группировки этих 100 полей в более мелкие классы ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...