Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Через одно имя к многим свойствам


Автор: almagnit 18.5.2008, 19:23
Еще в школе я делал подобное т.е., обращался к нескольким свойствам объекта указывая один раз его

имя, конструкцию не помню, а делал наверное на Паскале. 

Очень уж рябит глаза :

Код

<ИМЯ ОБЪЕКТА>.<СВОЙСТВО ОБЪЕКТА>
<ИМЯ ОБЪЕКТА>.<СВОЙСТВО ОБЪЕКТА>
<ИМЯ ОБЪЕКТА>.<СВОЙСТВО ОБЪЕКТА>
<ИМЯ ОБЪЕКТА>.<СВОЙСТВО ОБЪЕКТА>
<ИМЯ ОБЪЕКТА>.<СВОЙСТВО ОБЪЕКТА>
<ИМЯ ОБЪЕКТА>.<СВОЙСТВО ОБЪЕКТА>
<ИМЯ ОБЪЕКТА>.<СВОЙСТВО ОБЪЕКТА>


Хотел бы что-то вроде:

Код

<ИМЯ ОБЪЕКТА>{
     .<СВОЙСТВО ОБЪЕКТА>
     .<СВОЙСТВО ОБЪЕКТА>
     .<СВОЙСТВО ОБЪЕКТА>
     .<СВОЙСТВО ОБЪЕКТА>
     .<СВОЙСТВО ОБЪЕКТА>
}


ЗЫ:

Последняя конструкция очень похожа на ту которую я использовал, но я не помню как это называется 

и поэтому не найду информацию. И примеров тоже не попадалось.

Автор: Kangaroo 18.5.2008, 19:47
Цитата(almagnit @  18.5.2008,  19:23 Найти цитируемый пост)
имя, конструкцию не помню, а делал наверное на Паскале. 

Похоже на:
with SOMETHING do
begin
   //code
end


В Java

Добавлено через 24 секунды
В Java такого нет

Автор: almagnit 18.5.2008, 19:57
Будем надеяться на появление

Добавлено через 1 минуту и 26 секунд
А как в Паскале эта конструкция называется ?

Автор: Kangaroo 18.5.2008, 20:24
Цитата(almagnit @  18.5.2008,  19:57 Найти цитируемый пост)
А как в Паскале эта конструкция называется ? 


Цитата(Kangaroo @  18.5.2008,  19:47 Найти цитируемый пост)
with SOMETHING do


Автор: Platon 18.5.2008, 20:41
Ребят вы че?? А как насчет...
Представим цепочку вложенных свойств: MyObject -> Object2 -> Object3 -> ...
Код

myObject.object2.object3.setValue1(val1);
myObject.object2.object3.setValue2(val2);
myObject.object2.object3.setValue3(val3);
myObject.object2.object3.setValue4(val4);

эоквивалентно
Код

final Object3 obj = myObject.object2.object3;
obj.setValue1(val1);
obj.setValue2(val2);
obj.setValue3(val3);
obj.setValue4(val4);

Автор: almagnit 18.5.2008, 20:59
Platon, возьму на вооружение.

Но ты заменяешь несколько имен разных объектов одним, а суть вопроса в единичном написании имя

объекта и обращении к нескольким его свойствам.

Автор: Platon 18.5.2008, 21:12
almagnit, что-то я до конца не понял, суть вопроса в сокращении рутинного письма и избавиться от рябления в глазах.

Добавлено через 2 минуты и 22 секунды
Ааа, понял. На самом деле не вижу необходимости в таком сокращении.

Добавлено через 5 минут и 11 секунд
Есть фишка с цепочным стилем, который работает к примеру в Hibernate objectName.setValue1(val1).setValue2(val2).setValue3(3)
но здесь тоже идет через функции (геттеры/сеттеры, но это в Java стиле), только некоторые библиотеки поддерживают такой подход.

Автор: Се ля ви 19.5.2008, 12:21
Как раз об этом писал в блоге:
http://se-la-vy.blogspot.com/2008/04/paramsbean.html
И здесь на форуме - http://forum.vingrad.ru/index.php?showtopic=43890&view=findpost&p=338337

Автор: almagnit 19.5.2008, 13:57
Platon, Се ля ви, ваш способ наверное работает не со всеми объектами (для JButton не работает)

Я решил этот вопрос функцией которой в качастве параметра передается нужный обект :

Код

    void objProp(Object obj, String name){
        obj.setMinimumSize(new Dimension(25,25));
        obj.setPreferredSize(new Dimension(25,25));
        obj.setMaximumSize(new Dimension(50,50));
        obj.setText(name);
        obj.setMargin(new Insets(0,0,0,0));
        obj.addActionListener(new ElemAction());
    }

Всем спасибо за пополнение моих знаний и стремление помочь  smile .

Автор: Platon 19.5.2008, 14:19
Цитата(almagnit @  19.5.2008,  14:57 Найти цитируемый пост)
ваш способ наверное работает не со всеми объектами (для JButton не работает)

Цитата(Platon @  18.5.2008,  22:12 Найти цитируемый пост)
только некоторые библиотеки поддерживают такой подход.


Автор: almagnit 19.5.2008, 14:49
А как передовать моей вышеописанной функции любой объект ?

Потому как если я передаю не Object, то Java говорит что не может найти таких свойств

Автор: math64 19.5.2008, 15:37
Можно так:
Код

abstract public class With<T> {
  T t;
  public With(T t) {
    this.t = t;
    Do();
  }
  
  public abstract void Do();
  
  static public void main (String[] args) {
    new With<String>("test") {
      @Override
      public void Do() {
        System.out.println(t +  ' ' + t.length());
      }
    };
  }
}

Хотя обвески много, большую её часть IDE вставляет автоматически.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)