是否建议在Java中创建一个空的POJO类?

问题描述

假设我有一个超类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时会发出警告,但功能正常。请提出建议。

解决方法

大多数情况下,如果您只是创建一个没有自己状态的Class,那么设计将是不正确的,但是如果这样,

Aabstract类,即您要限制用户创建A的实例,从而将其标记为抽象,然后通过创建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{}

如果您只想将父类字段用于ur函数,还可以使代码在运行时更加动态化

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<B>,List<C>

,

我可以想到的确没有任何理由需要扩展类而不进行任何更改。也许您觉得将来会需要它。这违反了YAGNI主体。
只需使用A类即可。您可以在需要时进行更改。

,

这真的没有意义。如果它给您警告,则可能有充分的理由。除非您有一个合适的用例,并且知道自己在做什么,否则空类除了将无用的文件添加到项目中之外没有任何作用