Правильный способ создания суперкласса из подкласса - PullRequest
0 голосов
/ 01 октября 2011

У меня есть клиент-серверное приложение.

У клиента есть класс: Item.java

public class Item
    public string name;
    public string size;

и сервер имеет класс PersistableItem.java, который позволяет мне хранить его с использованием JPA

public class PersistableItem extends Item
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    public Long Id;

и отправляет его на сервер, который выполняет метод addItemToServer:

public void addItem( Item item){
    //create PersistableItem from item
    DAO.save([paramerter = PersistableItem]);     
}

В моем методе сервера я могу привести элемент как PersistableItem? Сделать в PersistableItem конструктор, который принимает Item?

Какой здесь правильный дизайн?

Ответы [ 2 ]

2 голосов
/ 01 октября 2011

Как вы предложили, вы можете создать конструктор в SomePersistedItem, который принимает SomeItem.В конструкторе вы вызываете super с именем и размером, так что ваш SomePersistedItem правильно заполнен.

public class SomePersistableItem extends SomeItem
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long Id;

    public SomePersistableItem(SomeItem originalItem) {
        super(originalItem.getName(), originalItem.getSize());
    }

И вы просто добавляете его.

public void addItem( someItem item){
    DAO.save(new PersistableItem(item));     
}

Предполагается, что в SomeItem есть конструктор, который принимает имя и размер.Иначе вы используете любой метод, который вам нужен для создания SomeItem (Factory, setters ...)

0 голосов
/ 01 октября 2011

Я бы заставил ваш постоянный элемент расширить интерфейс

public interface Persistable {
    boolean persist();
}

public class SomePersistableItem extends SomeItem implements Persistable {

}

public void addItem(Persistable p) {
    p.persist();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...