日期:2014-05-20  浏览次数:20768 次

那位给点思路!
现有一个List,里边有1-8条数据,最大8条,最小1条,现在有个实体类,其中有
setN1,setN2,.....setN8,8个方法
我需要把List中的数据取出来,set到这个实体中,当list有一条数据的时候只需要setN1,依次类推,也就是动态控制set的个数。
现在我是通过获取list的大小来控制set的个数,也就是写8个if判断,我觉得这样写不灵活,所以肯请各位给点思路。

------解决方案--------------------
一定要用8个set方法?
用了的话,难免要if或者switch啊
------解决方案--------------------
长度为list.size()
------解决方案--------------------
写一个抽象类,里面有8个set方法,再分别写8个实现,分别有1-8个set方法。根据list.size()判断应用那个实现类好像就可以吧。
也就是说class Father是个抽象类,有8个不同的setN方法
再写8个子类Child1 - Child8分别实现其中的一个到8个setN方法
根据list.size()的值,判断应用那个child的类就能保证用了相应个数的setN方法了


------解决方案--------------------
楼上的方法好
符合OO思想
------解决方案--------------------
楼主所提的问题,是一个很有代表性的问题.下面是我编的代码,有不对的地方,多多指教啊
package qujianfeng;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
//楼主所说的实体类
public class TheObject {
//八个属性
private String n1;
private String n2;
private String n3;
private String n4;
private String n5;
private String n6;
private String n7;
private String n8;
public String getN1() {
return n1;
}
/**
* 注意:这是楼主要的关键所在
*/
public void setValues(List list) throws SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException{
Class clazz=this.getClass();
Method method=clazz.getMethod( "setN7 ",new Class[]{java.lang.String.class});
for(int i=0;i <list.size();i++){
method=clazz.getMethod( "setN "+(i+1),new Class[]{java.lang.String.class});
//调方法,把list中的值放入对象
method.invoke(this, new Object[]{list.get(i)});
}
}
public void setN1(String n1) {
this.n1 = n1;
}
public String getN2() {
return n2;
}
public void setN2(String n2) {
this.n2 = n2;
}
public String getN3() {
return n3;
}
public void setN3(String n3) {
this.n3 = n3;
}
public String getN4() {
return n4;
}
public void setN4(String n4) {
this.n4 = n4;
}
public String getN5() {
return n5;
}
public void setN5(String n5) {
this.n5 = n5;
}
public String getN6() {
return n6;
}
public void setN6(String n6) {
this.n6 = n6;
}
public String getN7() {
return n7;
}
public void setN7(String n7) {
this.n7 = n7;
}
public String getN8() {
return n8;
}
public void setN8(String n8) {
this.n8 = n8;
}
public String toString() {
StringBuffer sb=new StringBuffer();
sb.append( "N1= "+getN1());
sb.append( ";N2= "+getN2());
sb.append( ";N3= "+getN3());
sb.append( ";N4= "+getN4());
sb.append( ";N5= "+getN5());
sb.append( ";N6= "+getN6());
sb.append( ";N7= "+getN7());
sb.append( ";N8= "+getN8());
return sb.toString();
}
//来,大家测试一下效果
public static void main(String[] args) throws SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException {
List list=new ArrayList();
list.add( "n1_value ");
list.add( "n2_value ");
list.add( "n3_value ");