【问题标题】:Is it advisable to create an empty POJO class in Java?是否建议在 Java 中创建一个空的 POJO 类?
【发布时间】:2023-03-10 01:35:01
【问题描述】:

假设我有一个超类 A,它有字段

class A {
    String name; 
    int age;
    setName(String name);
    getName();

    setAge(int age);
    getAge()
}

我有多个类扩展 A 并添加更多字段以及 getter 和 setter。 现在有另一个类,比如 B,它需要姓名和年龄,这已经由 A 类提供。 那么我应该继续创建没有任何字段的 B 类并简单地扩展 A 类,还是应该直接使用 A 类?

class B extends A {}

P.S - 我正在使用泛型,当我直接使用超类 A 时会发出警告,但功能运行良好。请提出建议。

【问题讨论】:

  • 请显示产生警告的代码。
  • B 类完全是空的,还是根本没有 bean 属性(即没有 getter 或 setter 方法)?

标签: java spring javabeans pojo


【解决方案1】:

如果你只是创建一个没有自己的状态的类,大多数情况下设计不会是正确和合理的,但是如果

Aabstract 类,即您想限制用户创建 A 的实例,因此将其标记为 abstract ,然后通过创建 B 来创建 A 的实现。 以下是相同的示例

abstract class A{
    protected String name;
    protected int age;
    
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}

class B extends A{}

如果您只想在您的函数中使用父类字段,也可以使代码在运行时更加动态,那么您可能可以这样做

abstract class A{  // you can altogether remove 'abstract' and not create a B class
    protected String name;
    protected int age;
    
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}

class B extends A{}

class C extends A{
    protected String location;

    public String getLocation() {
        return location;
    }
    public void setLocation(String location) {
        this.location = location;
    }
}

现在看下面的方法

public static <T extends A> void printName(List<T> list) {
        for (T t : list) {
            System.out.println(t.getName());
        }
    }

这符合List&lt;B&gt;, List&lt;C&gt;

【讨论】:

    【解决方案2】:

    真的没有理由,我能想到,你需要在不改变任何东西的情况下扩展一个类。也许你觉得你将来会需要它。这违反了YAGNI 原则。
    只需使用 A 类即可。您可以在需要时进行更改。

    【讨论】:

      【解决方案3】:

      真的没有意义。如果它给你一个警告,那可能是有充分理由的。除非你有一个小众用例并且知道你在做什么,否则空类除了向你的项目添加无用的文件之外没有任何作用

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-02-10
        • 2020-02-24
        • 2011-10-30
        • 1970-01-01
        • 1970-01-01
        • 2011-12-11
        • 1970-01-01
        相关资源
        最近更新 更多