从子类创建超类的正确方法

发布于 2024-12-07 15:07:24 字数 643 浏览 1 评论 0原文

我有一个客户端服务器应用程序。

客户端有一个类: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 的构造函数?

这里正确的设计是什么?

I have an client-server application.

The client has a class: Item.java

public class Item
    public string name;
    public string size;

and the server has a class PersistableItem.java which lets me store it using JPA

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

and sends it to the server which executes the addItemToServer method:

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

In my server method do I cast the item as PersistableItem? Do i make a constructor in PersistableItem that takes in a Item?

What's the proper design here?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

谁对谁错谁最难过 2024-12-14 15:07:24

正如您所建议的,您可以在 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(工厂,设置器......)

As you suggested, You can create a constructor in SomePersistedItem that takes a SomeItem. In the constructor, you call super with the name and size, so you have your SomePersistedItem correctly populated.

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

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

And you just add it.

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

That's assuming you have a constructor in SomeItem that takes a name and size. Else you use whatever method you have to build SomeItem (Factory, setters...)

百善笑为先 2024-12-14 15:07:24

我会让你的持久项目扩展一个接口

public interface Persistable {
    boolean persist();
}

public class SomePersistableItem extends SomeItem implements Persistable {

}

public void addItem(Persistable p) {
    p.persist();
}

I would make your persistable item extend an interface

public interface Persistable {
    boolean persist();
}

public class SomePersistableItem extends SomeItem implements Persistable {

}

public void addItem(Persistable p) {
    p.persist();
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文