java - 一个类字段有30个,现在只想用中间的10个字段,单独组成一个类,如何设计?
本文介绍了java - 一个类字段有30个,现在只想用中间的10个字段,单独组成一个类,如何设计?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
一个类字段有30个,现在只想用中间的10个字段,单独组成一个类,如何设计?
问题描述:
类A 字段 30个
类B 字段 10个(全部取自类A)
新组成的10个字段可能会变化,两个类有关系,不想以后字段变动,两个类都需要改,有什么好办法?
解决方案
类A 字段 30个
类B 字段 10个(全部取自类A)
那就应该是A继承B。A只需要全部30个中B没有的20个字段
或者弄一个SubFields的Map,通过反射获取A的字段。
public abstract class SubFieldMap<T> extends HashMap<String,Object> {
private static final long serialVersionUID = 123455;
@SuppressWarnings("all")
public SubFieldMap(T bean) throws ReflectiveOperationException {
super();
for(String fieldName : getSubFields()) {
Field field = bean.getClass().getField(fieldName);
Method getterMethod = getGetterMethod((Class<T>) bean.getClass(),field);
Object value = getterMethod.invoke(bean);
super.put(fieldName,value);
}
}
protected abstract List<String> getSubFields();
private Method getGetterMethod(Class<T> beanClass, Field field) throws ReflectiveOperationException {
if(!field.getDeclaringClass().equals(beanClass))
throw new NoSuchFieldException("field " + field.getName() + " does not belong class " + beanClass.getName());
String setterMethodName = field.getName();
setterMethodName = StringUtils.upperCase(StringUtils.left(setterMethodName,1)) + StringUtils.right(setterMethodName,setterMethodName.length()-1);
setterMethodName = "get" + setterMethodName;
return beanClass.getDeclaredMethod(setterMethodName);
}
}
创建B类的时候,覆盖getSubFields方法,提供需要的字段名。创建B对象的时候,构造方法传进A类的实例,就自动把subFields的属性put到Map里面了:
public class A {
private String aaa;
private String bbb;
private Integer ccc;
public String getAaa() {
return aaa;
}
public void setAaa(String aaa) {
this.aaa = aaa;
}
public String getBbb() {
return bbb;
}
public void setBbb(String bbb) {
this.bbb = bbb;
}
public Integer getCcc() {
return ccc;
}
public void setCcc(Integer ccc) {
this.ccc = ccc;
}
}
public class B extends SubFieldMap<A> {
public B(A bean) throws ReflectiveOperationException {
super(bean);
}
@Override
protected List<String> getSubFields() {
return Arrays.asList("aaa","ccc");
}
}
这篇关于java - 一个类字段有30个,现在只想用中间的10个字段,单独组成一个类,如何设计?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文