java - 我应该在 Java POJO 上使用 "extends"来提取公共(public)属性吗?

标签 java orm pojo extends

我在 Android 上使用 SQLite ORM 来保存和查询数据。

我有一些用于 ORM 的 POJO,这些 POJOS 中有几个相同的属性,例如“时间戳”。

那么我是否应该将这些公共(public)属性提取到基类中,以防止其他协作者忘记使用这些属性?例如,

class BaseEvent {
    String activityName;
    //activityName getter and setter
}

class TouchEvent extends BaseEvent {
    int x;
    int y;
    //x and y's getter and setter
    public TouchEvent(int x,int y,String activityName){...}
}

class AccelerationEvent extends BaseEvent {
    float x,y,z;
    public AccelerationEvent (float x,float y,float z,String activityName){...}
}

忽略特定的ORM(Realm.io),这是设计模式的良好实践吗?

最佳答案

看着这个issue从2015年开始,我们可以看到Realm在真正的多态性方面存在问题。

此刻继承 Realm 可以让你:

  • 子类继承父类的类方法、实例方法和属性。
  • 以父类为参数的方法和函数可以对子类进行操作。

因此,当您使用 Realm 时,强烈建议使用组合而不是继承

编辑

让我们使用组合重写您的示例:

interface BaseEvent {}

class TouchEvent implements BaseEvent {}

class AccelerationEvent implements BaseEvent {}

class SomeOfYourClass{
    BaseEvent event;
}

关于java - 我应该在 Java POJO 上使用 "extends"来提取公共(public)属性吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53879303/

相关文章:

c# - 这里的每个人都在跳上 ORM 潮流吗?

c# - 如何使用 Dapper ORM 将 SQL Select 查询拆分为两个模型 C#

list - 如何创建包含容器具有属性的列表的 POJO?

java - 当给定起始日期时,如何在 Java 中动态创建日期字段?

java - 在 Netbeans 中编译 Spark 需要一些帮助

java - ClassLoader.loadClass() 令人惊讶地抛出 NoClassDefFoundError 而不是 ClassNotFoundException

java - JVM 进行了一次完整的 GC,然后就没有剩余的系统内存了

sql - Laravel 4 查询生成器在 "from"子句中不支持多个表

Android 网络传输对象

java - 在spring boot中应该在哪里定义实体模型类