Как разработать мой метод сеттера? - PullRequest
0 голосов
/ 13 марта 2012

У меня есть метод, который я написал так:

void updateMyJaxb(final JAXBElement<?> jaxbElement) {

addElementtoJaxb(jaxbElement)
}


void addElementTJaxb(jaxbElement)
{
   //have to cast to myown type 
((JAXBElement<MyType>) jaxbElement).getValue().setSomeValue(somevalue);
}

так что, по сути, я добавляю немного персонала в JAXBElement Вопрос в следующем: это хороший дизайн, взять ссылку и изменить содержание? Будет ли лучше вернуть ссылку на обновленный объект? В противном случае метод не может быть простым для понимания?

1 Ответ

0 голосов
/ 13 марта 2012

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

Возвращение объектов также не требуется, поскольку Java передает параметры (объекты в целом) по ссылке.

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

private JAXBElement clone(JAXBElement o) {
    JAXBElement clone = new JAXBElement();

    clone.setName(o.getName());
    ...

    return clone;
}

Это должно сделать работу.

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