SonarQube给我这个错误:此类的“抽象类应该同时具有抽象方法和具体方法”:
public abstract class Person {
protected String emailAddress;
protected String firstName;
protected String lastName;
protected Timestamp createdDate;
// public getters and setters
我使用此类来实现对该DTO的继承
public class FacultyDTO extends Person implements Serializable {
private static final long serialVersionUID = 1L;
private Integer userId;
private Integer clientId;
private String status;
// getters and setters for fields above
public class StudentDTO extends Person implements Serializable {
private static final long serialVersionUID = 1L;
private Integer studentId;
// getters and setters for fields above
但是Sonar表示要使用个人构造函数将Person修改为一个具体的类,因此我无法将其扩展为实现继承。我在做什么是不好的做法?
来自文档
抽象类的目的是提供一些可遗传的行为,同时定义必须由子类实现的方法。
一个没有抽象方法的类,其纯粹是为了防止实例化而被抽象化的,应该使用私有构造函数转换为具体类(即删除abstract关键字)。
->您在这里。因此,这就是声纳显示此规则违反的原因。
仅具有抽象方法且没有可继承行为的类应转换为接口。
Sonar 说要将 Person 修改为具有私有的具体类 构造函数
这听起来很愚蠢。谁想只用私有构造函数声明一个具体的类?好吧,除非你只做单例/静态之类的事情,这里不是这种情况。
在您的情况下,我建议您删除 abstract 关键字并向您的 Person 类添加受保护的构造函数。这样你就可以让 Sonar 开心,希望如此。
public class Person {
protected Person() { }