Необходимо знать, какой метод обработки переменных будет более эффективным в этом случае - PullRequest
0 голосов
/ 03 июня 2011

Прямо сейчас у меня есть класс считывателя конфигурации, который просматривает текстовый файл конфигурации и добавляет найденные значения к переменным, которые я объявил ранее. Затем все эти переменные передаются в конструктор. Само собой разумеется, это грязно, и это выглядит так:

String buttonText = "";
String buttonPassword = ""; 
String buttonAction = ""; 
String buttonFont = "";
int buttonPosX = 0;
int buttonPosY = 0;
int buttonWidth = 0;
int buttonHeight = 0;
int buttonFontSize = 0;
int buttonFontColor = 0;
int buttonBgColor = 0;
int buttonLayoutPosition = 0;

// Gathering information here ...

parent.addButton(buttonText, buttonPassword, buttonPosX, buttonPosY, buttonLayoutPosition, buttonWidth, buttonHeight, buttonAction, buttonFont, buttonFontSize, buttonFontColor, buttonBgColor);

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

Ответы [ 4 ]

3 голосов
/ 03 июня 2011

Вы можете создать класс ButtonConfig, который имеет все эти значения в виде полей. Тогда вам нужно только передать один объект в c'tor. В зависимости от организации вашей общей программы может иметь смысл переместить код, который инициализирует все параметры конфигурации, в сам класс конфигурации.

2 голосов
/ 03 июня 2011

Если вы используете Eclipse, вы можете выбрать в контекстном меню

-> refactor-> Извлечь класс

, чтобы создать объект данных.Этот объект данных должен быть записан только один раз и будет передан в качестве целого объекта в конструктор.

Это ценная альтернатива картам, так как вы не теряете проверку типов, javadocs и т. Д.* Ваш код будет выглядеть следующим образом:

public static class Data
{
  String buttonText = "";
  String buttonPassword = ""; 
  String buttonAction = ""; 
  String buttonFont = "";
  int buttonPosX = 0;
  ...
}

...
private Data data = new Data();
...
parent.addButton(data);
...

Диалог от Eclipse, чтобы сделать это для вас, будет выглядеть следующим образом:

Extract Class

2 голосов
/ 03 июня 2011

Это ссылка на старую ветку, но она точно объясняет, что я буду делать, я бы использовал шаблон построителя: Управление конструкторами со многими параметрами в Java

1 голос
/ 03 июня 2011

(Между прочим, здесь бессмысленно инициализировать String в "".)

Возможно, вы захотите построить Map из String в Object, используя, возможно, HashMap, и передать его. Это простой способ передать произвольный набор значений ключа. Объект Properties также может быть подходящим, поскольку этот класс может считывать пары ключ-значение из файла, хотя все они обрабатываются как текст.

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

...