Java Swing ActionMap ключи - PullRequest
       20

Java Swing ActionMap ключи

5 голосов
/ 19 марта 2009

Я поднимаюсь по кривой обучения Swing и читаю о InputMap и ActionMap. В книге О'Рейли о Swing сказано, что ключи для ActionMap могут быть любыми Object, но по соглашению String с.

Есть ли причина использовать объект, отличный от String? (например, enum)

Я думаю, что это плохая практика - использовать строковые литералы, поскольку они могут быть опечатаны без каких-либо ошибок компиляции. Поэтому я предполагаю, что рекомендуется хранить ключ ActionMap в виде неизменяемой переменной класса static final, определенной один раз (например, MyAction.NAME).

edit: Просто чтобы уточнить, мысль, которая пришла мне в голову, когда я читал документы, заключалась в том, чтобы использовать enum вместо String. Есть ли причина, по которой я должен использовать String?

Ответы [ 2 ]

2 голосов
/ 19 марта 2009

Я не уверен, почему вы не использовали бы перечисление напрямую (не смотрели на книгу О'Рейли), но в подобных случаях я бы предпочел использовать метод Enum.toString (), как в

MyActions.NAME.toString()

Это экономит накладные расходы при определении такого количества статических переменных, поэтому вы можете расширить функциональность перечисления MyActions, если вы хотите хранить дополнительную информацию о состоянии, и гарантировать уникальную строку для каждого перечисления. Все с ошибками во время компиляции.

Редактировать: Свинг предшествует Enum. Может ли это быть нашим удобным ответом? Посмотрите на API для макет карты . Если когда-либо существовал дизайн, требующий перечислений, это макет карты (позволяет циклически просматривать список компонентов, которые будут отображаться в одном и том же месте). Я предполагаю, что есть варианты использования, в которых строки могут быть предпочтительнее (например, добавленный пользователем материал), но давай: большую часть времени я собираюсь использовать это с каким-то предопределенным шаблоном состояния.

0 голосов
/ 29 мая 2009

На самом деле, вы предлагаете то, что делает сам Swing (иногда), так что вы правы.

Проверьте класс javax.swing.DefaultEditorKit. Все эти статические финальные строки используются Swing для создания ActionMap.

Однако, если вы проверяете их инициализацию на предмет внешнего вида, такого как WindowsLookAndFeel, у них также есть жестко закодированные строковые литералы в исходном коде.

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