我有一个Response class
,其中包含n个字段,并且有多个类可以扩展我的Response class
。在每个方法中,我需要设置响应类的字段以及我的子类字段,而不是我想创建一个公共方法来设置父类的所有字段并返回子类。
父类
class Response{
private String a;
public String getA() {
return a;
}
public void setA(String a) {
this.a = a;
}
}
子类1
class Custom extends Response{
private String b;
public String getB() {
return b;
}
public void setB(String b) {
this.b = b;
}
}
Sub Class2
class Custom1 extends Response{
private String c;
public String getC() {
return c;
}
public void setC(String c) {
this.c = c;
}
}
方法1
public Custom setFields(String aValue,String bValue){
Custom c = new Custom();
c.setA(aValue);
c.setB(bValue);
return c;
}
方法2
public Custom1 setFields(String aValue,String cValue){
Custom1 c1 = new Custom1();
c1.setA(aValue);
c1.setC(cValue);
return c1;
}
我想创建一个方法来设置属于Response类的字段的值,并分别返回相同的类对象Custom或Custom1
前:
Custom c = setResponseValue(aValue); OR
Custom1 c1 = setResponseValue(aValue);
类似
的方法public Custom/Custom1 setResponseValue(String value){
/**
Sets the value
**/
return Custom/Custom1;
}
请帮助,因为我需要一遍又一遍地做同样的事情。问题随着响应类中字段数的增加而增加。
答案 0 :(得分:3)
由于您希望返回具有父集值的子类,您可以让您的子类构造函数具有输入值,并使用它来设置父级的值。
public class Response {
private String value;
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
public class Child extends Response {
public Child(String value) {
setValue(value);
}
}
然后像这样使用它:
Child childResponse = new Child("hey");
更新: 我不确定我究竟是什么意思,但是如果你不想在构造函数中设置值,并且你不想为现有的子对象设置值,那么你可能需要一个带有这个的克隆对象新的价值。确保您的类支持Cloneable接口并且:
public Child cloneAndSetValue(String value) throws CloneNotSupportedException {
Child c = (Child) this.clone();
c.setValue(value);
return c;
}
答案 1 :(得分:0)
如果您希望setResponseValue
超出您的pojo类,那么您需要告诉它如何创建特定的子类。以下是使用Java lambdas和泛型完成它的方法:
Custom c1 = setResponseValue( Custom::new, "a1" );
Custom1 c2 = setResponseValue( Custom1::new, "a1" );
public static <T extends Response> T setResponseValue(Supplier<T> s, String value){
T result = s.get();
result.setA(value);
return result;
}