【发布时间】:2022-10-21 15:21:09
【问题描述】:
我想解决这样的问题。我有一些抽象类和一个带有返回该类实例的设置器的具体类:
@MappedSuperclass
public abstract class BaseEntity implements Serializable {
private Integer id;
public Integer getId() {
return id;
}
public BaseEntity setId(Integer id) {
this.id = id;
return this;
}
}
下一个摘要:
@MappedSuperclass
public abstract class NamedEntity extends BaseEntity {
private String name;
public String getName() {
return name;
}
public NamedEntity setName(String name) {
this.name = name;
return this;
}
}
最后是一个具体的类:
@Entity
public class Person extends NamedEntity {
private String address;
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
我想使用这种构建器,但在当前设置中,由于父设置器的返回类型不同,它无法正常工作
public Person build() {
Person person = new Person()
.setId(1); //return BaseEntity instead of Person
.setName("name") //returns NamedEntity instead of Person
.setAddress("foo"); //return Person!
return person;
}
当然有覆盖设置器的解决方法,但是....可以使用泛型以其他方式完成吗?
@Override
public Person setId(Integer id) {
super.setId(id);
return this;
}
@Override
public Person setName(String name) {
super.setName(name);
return this;
}
【问题讨论】:
-
您的构建类位于哪里?是
BaseEntity的成员吗?建设者不必流利。看起来你只是在构建一个Person然后设置它的属性。person.setId(1);、person.setName("name");等有什么问题?
标签: java generics inheritance