Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Add property to object


Автор: Tony 3.3.2006, 13:26
Можно ли добавить/удалить property(setter/getter) из oбъекта

Автор: chief39 3.3.2006, 13:37
Цитата(Tony @ 3.3.2006, 13:26 Найти цитируемый пост)
Можно ли добавить/удалить property(setter/getter) из oбъекта

Поясни значение "удалить". Что именно ты хочешь? Изменить объект? Или что-то вроде установить свойство в null?

Автор: Tony 3.3.2006, 13:42
Есть объект.У него проперти name.Соответственно есть setName/getName.Mne nuzno dobavit' property lastaname i 4tobi sgenerilis' metodi setLastname i getLastname.

Автор: batigoal 3.3.2006, 13:45
Имеется в виду динамически, во время работы программы?

Автор: Tony 3.3.2006, 13:47
Естественно

Автор: batigoal 3.3.2006, 13:52
А стоит ли так извращаться? Не вижу смысла в такой задаче, честно говоря. Можно узнать подробности?
Почему нельзя обойтись просто коллекцией параметров (обычно - HashMap), и добавлять/удалять параметры по мере необходимости?

Автор: powerOn 3.3.2006, 13:55
Динамически нельзя. Класс уже скомпилирован.

А если не секрет зачем?

Автор: Tony 3.3.2006, 14:02
EX....
Ponimaeh mne vozvrashaetsja List objecktov.No u etih objectov netu prpoerty enable(type boolean).Poetomu mne prihoditsja sozdavat' novij list s novimi objektami (u katorih est' property enable).Kopirivat' zna4enija iz kazdogo objekta iz sozdavat' novij object s propery enable i pomeshat' v novij list.O4en gemorojno.

Автор: batigoal 3.3.2006, 14:14
Мне кажется, создание нового объекта будет вполне логичным решением. Я не уверен, что к существующему объекту вообще можно добавить новое поле. А если даже можно - уверен, это будет ОЧЕНЬ ресурсоемкая операция. Поэтому, мне кажется, лучше всего не мучаться, а сделать класс-обертку вида
Код

class EnablingElement
{
  Element element;
  boolean enable;

  EnablingElement(Element element)
  {
    this.element = element;
  }
}

Ну и создавать список из EnablingElement'ов.


Либо подкорректировать класс начального списка объектов.

Автор: Tony 3.3.2006, 14:30
Nas4ot obvjortok horoshja ideja.Thanks.

Автор: batigoal 3.3.2006, 14:39
Кстати, при вводе поста можно установить галочку "транслит" (она под смайликами), тогда буквы будут транслитерироваться в кириллицу. Вроде ее уже починили...

Автор: Tony 3.3.2006, 15:05
Просто когда текст англ/рус надоедает переклучать чецкбох

Автор: LSD 3.3.2006, 16:46
Цитата(Tony @ 3.3.2006, 15:05 Найти цитируемый пост)
Просто когда текст англ/рус надоедает переклучать чецкбох

Он включается/выключается Esc-ом.

Автор: tux 4.3.2006, 05:01
Можно попробовать использовать генератор кода http://cglib.sourceforge.net/, но это вряд ли упростит решение.

Автор: Tony 14.3.2006, 17:02
Код

public class Test {
    Test(){
        
        DynaProperty[] properties = 
        { new DynaProperty("loginDate", Date.class),
          new DynaProperty("name", String.class),
          new DynaProperty("password", String.class), 
          new DynaProperty("my", String.class) 
        };
        
        DynaClass userDynaClass = new BasicDynaClass("user", null, properties);
        
        Map map = new HashMap();
        map.put("name", "jason");
        map.put("password", "secret");
        map.put("loginDate", new Date());
        map.put("my", "Yo yo");
        try{
        DynaBean user = userDynaClass.newInstance();
        BeanUtils.populate(user, map);
        System.out.println(BeanUtils.getProperty(user,"my")); // displays 'jason'
        }catch(Exception e){
            e.printStackTrace();
        }
        
    }
    
    public static void main(String [] args){
        new Test();
    }
        
}

Код

public class User {
    private Date loginDate;
    private String name;
    private String password;

    public User() { }

    public Date getLoginDate() {
        return loginDate;
    }

    public String getName() {
        return name;
    }

    public String getPassword() {
        return password;
    }

    public void setLoginDate(Date loginDate) {
        this.loginDate = loginDate;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public static User getUser(String name) {
       return new User();
    }
}

smile smile

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