public List convertToValueDetails() {
resetDetails() ;
   List list = new ArrayList();
if (this.getHeTorokuKbn().equals("1")) {
if (!this.getDeTokubaiTiku01().equals("")) {
PP1101TRANValueObject vo = new PP1101TRANValueObject();
vo.setDbKikakuNo(EditStringPositionAndBlank.editRightZero(this.getHeKikakuNo(), 8));// 企画№
vo.setDbHojin(null);//法人コード
vo.setDbSzkJigyosyo(null);//所属事業所コード
vo.setDbNewDate(this.getFoNewDate()); // 最新更新日
vo.setDbNewAddress(null);//最新更新アドレス
vo.setDbNewKousinsya(this.getFoNewKousinsya());// 最新更新者
vo.setDbOldKousinsya(this.getFoOldKousinsya());// 初回登録者
vo.setDbOldDate(this.getFoOldDate());// 初回登録日
vo.setDbNewKousinsyanm(this.getFoNewKousinsyanm());// 最新更新者名漢字
         vo.setDbOldKousinsyanm(this.getFoOldKousinsyanm());// 初回登録者名漢字
vo.setDbTokubaiTiku(this.getDeTokubaiTiku01().substring(0, 3));// 特売地区
vo.setDbEdaban(this.getDeTokubaiTiku01().substring(3, 5));// 枝番
vo.setDbTokubaiTikunm(this.getDeTkTikinm01());// 販売地区・括り№名称
vo.setDbKukurino(null);//括り№
ist.add(vo);
}
if (!this.getDeTokubaiTiku02().equals("")) {
PP1101TRANValueObject vo = new PP1101TRANValueObject();
vo.setDbKikakuNo(EditStringPositionAndBlank.editRightZero(this.getHeKikakuNo(), 8));// 企画№
vo.setDbHojin(null);//法人コード
vo.setDbSzkJigyosyo(null);//所属事業所コード
vo.setDbNewDate(this.getFoNewDate()); // 最新更新日
vo.setDbNewAddress(null);//最新更新アドレス
vo.setDbNewKousinsya(this.getFoNewKousinsya());// 最新更新者
vo.setDbOldKousinsya(this.getFoOldKousinsya());// 初回登録者
vo.setDbOldDate(this.getFoOldDate());// 初回登録日
vo.setDbNewKousinsyanm(this.getFoNewKousinsyanm());// 最新更新者名漢字
vo.setDbOldKousinsyanm(this.getFoOldKousinsyanm());// 初回登録者名漢字
vo.setDbTokubaiTiku(this.getDeTokubaiTiku01().substring(0, 3));// 特売地区
vo.setDbEdaban(this.getDeTokubaiTiku01().substring(3, 5));// 枝番
vo.setDbTokubaiTikunm(this.getDeTkTikinm01());// 販売地区・括り№名称
vo.setDbKukurino(null);//括り№
list.add(vo);
}
if (!this.getDeTokubaiTiku03().equals("")) {
PP1101TRANValueObject vo = new PP1101TRANValueObject();
vo.setDbKikakuNo(EditStringPositionAndBlank.editRightZero(this.getHeKikakuNo(), 8));// 企画№
vo.setDbHojin(null);//法人コード
vo.setDbSzkJigyosyo(null);//所属事業所コード
vo.setDbNewDate(this.getFoNewDate()); // 最新更新日
vo.setDbNewAddress(null);//最新更新アドレス
vo.setDbNewKousinsya(this.getFoNewKousinsya());// 最新更新者
vo.setDbOldKousinsya(this.getFoOldKousinsya());// 初回登録者
vo.setDbOldDate(this.getFoOldDate());// 初回登録日
vo.setDbNewKousinsyanm(this.getFoNewKousinsyanm());// 最新更新者名漢字
vo.setDbOldKousinsyanm(this.getFoOldKousinsyanm());// 初回登録者名漢字
vo.setDbTokubaiTiku(this.getDeTokubaiTiku01().substring(0, 3));// 特売地区
vo.setDbEdaban(this.getDeTokubaiTiku01().substring(3, 5));// 枝番
vo.setDbTokubaiTikunm(this.getDeTkTikinm01());// 販売地区・括り№名称
vo.setDbKukurino(null);//括り№
list.add(vo);
}
if (!this.getDeTokubaiTiku04().equals("")) {
   PP1101TRANValueObject vo = new PP1101TRANValueObject();
vo.setDbKikakuNo(EditStringPositionAndBlank.editRightZero(this.getHeKikakuNo(), 8));// 企画№
vo.setDbHojin(null);//法人コード
vo.setDbSzkJigyosyo(null);//所属事業所コード
vo.setDbNewDate(this.getFoNewDate()); // 最新更新日
vo.setDbNewAddress(null);//最新更新アドレス
vo.setDbNewKousinsya(this.getFoNewKousinsya());// 最新更新者
vo.setDbOldKousinsya(this.getFoOldKousinsya());// 初回登録者
vo.setDbOldDate(this.getFoOldDate());// 初回登録日
vo.setDbNewKousinsyanm(this.getFoNewKousinsyanm());// 最新更新者名漢字
vo.setDbOldKousinsyanm(this.getFoOldKousinsyanm());// 初回登録者名漢字
vo.setDbTokubaiTiku(this.getDeTokubaiTiku01().substring(0, 3));// 特売地区
vo.setDbEdaban(this.getDeTokubaiTiku01().substring(3, 5));// 枝番
vo.setDbTokubaiTikunm(this.getDeTkTikinm01());// 販売地区・括り№名称
vo.setDbKukurino(null);//括り№
list.add(vo);
}
if (!this.getDeTokubaiTiku05().equals("")) {
PP1101TRANValueObject vo = new PP1101TRANValueObject();
vo.setDbKikakuNo(EditStringPositionAndBlank.editRightZero(this.getHeKikakuNo(), 8));// 企画№
vo.setDbHojin(null);//法人コード
vo.setDbSzkJigyosyo(null);//所属事業所コード
vo.setDbNewDate(this.getFoNewDate()); // 最新更新日
vo.setDbNewAddress(null);//最新更新アドレス
vo.setDbNewKousinsya(this.getFoNewKousinsya());// 最新更新者
vo.setDbOldKousinsya(this.getFoOldKousinsya());// 初回登録者
vo.setDbOldDate(this.getFoOldDate());// 初回登録日
vo.setDbNewKousinsyanm(this.getFoNewKousinsyanm());// 最新更新者名漢字
vo.setDbOldKousinsyanm(this.getFoOldKousinsyanm());// 初回登録者名漢字
vo.setDbTokubaiTiku(this.getDeTokubaiTiku01().substring(0, 3));// 特売地区
vo.setDbEdaban(this.getDeTokubaiTiku01().substring(3, 5));// 枝番
vo.setDbTokubaiTikunm(this.getDeTkTikinm01());// 販売地区・括り№名称
vo.setDbKukurino(null);//括り№
list.add(vo);
}
return list; }这段代码中IF语句都有this.getDeTokubaiTiku10()其中共同的是this.getDeTokubaiTiku+数字
能不能用一个循环变量I来取代其中的数字。这样省去了很多代码了。高手说下。

解决方案 »

  1.   

    this.getDeTokubaiTiku+数字
    能不能用一个循环变量I来取代其中的数字
    -------------------------------------
    这用反射就可以作到
      

  2.   

    把重复的代码提取出来作为一个函数,然后再调用此函数。
    显然重复的是:
    PP1101TRANValueObject vo = new PP1101TRANValueObject();
    vo.setDbKikakuNo(EditStringPositionAndBlank.editRightZero(this.getHeKikakuNo(), 8));// 企画№
    vo.setDbHojin(null);//法人コード
    vo.setDbSzkJigyosyo(null);//所属事業所コード
    vo.setDbNewDate(this.getFoNewDate()); // 最新更新日
    vo.setDbNewAddress(null);//最新更新アドレス
    vo.setDbNewKousinsya(this.getFoNewKousinsya());// 最新更新者
    vo.setDbOldKousinsya(this.getFoOldKousinsya());// 初回登録者
    vo.setDbOldDate(this.getFoOldDate());// 初回登録日
    vo.setDbNewKousinsyanm(this.getFoNewKousinsyanm());// 最新更新者名漢字
    vo.setDbOldKousinsyanm(this.getFoOldKousinsyanm());// 初回登録者名漢字
    vo.setDbTokubaiTiku(this.getDeTokubaiTiku01().substring(0, 3));// 特売地区
    vo.setDbEdaban(this.getDeTokubaiTiku01().substring(3, 5));// 枝番
    vo.setDbTokubaiTikunm(this.getDeTkTikinm01());// 販売地区・括り№名称
    vo.setDbKukurino(null);//括り№
    ist.add(vo);
    把它提取出来做为单独的函数,然后再调用
      

  3.   

    解决这个问题可能得用到反射,但我认为那并没有必要,因为代码重复得大头是每一段IF语句中的执行语句,我只对比了前三个IF条件中的执行语句,是完全相同的,所以要消除大量代码可以Extract Methodpublic List convertToValueDetails() {resetDetails() ;
    List list = new ArrayList();if (!getHeTorokuKbn().equals("1")) return;if (!getDeTokubaiTiku01().equals("")) list.add(getValueObj());
    if (!getDeTokubaiTiku02().equals("")) list.add(getValueObj());
    if (!getDeTokubaiTiku03().equals("")) list.add(getValueObj());
    if (!getDeTokubaiTiku04().equals("")) list.add(getValueObj());
    if (!getDeTokubaiTiku05().equals("")) list.add(getValueObj());return list;
    }private PP1101TRANValueObject getValueObject() {
      
    PP1101TRANValueObject vo = new PP1101TRANValueObject();
    vo.setDbKikakuNo(EditStringPositionAndBlank.editRightZero(this.getHeKikakuNo(), 8));
    vo.setDbHojin(null);// 法人コード
    vo.setDbSzkJigyosyo(null);// 所属事業所コード
    vo.setDbNewDate(this.getFoNewDate()); // 最新更新日
    vo.setDbNewAddress(null);// 最新更新アドレス
    vo.setDbNewKousinsya(this.getFoNewKousinsya());// 最新更新者
    vo.setDbOldKousinsya(this.getFoOldKousinsya());// 初回登録者
    vo.setDbOldDate(this.getFoOldDate());// 初回登録日
    vo.setDbNewKousinsyanm(this.getFoNewKousinsyanm());// 最新更新者名漢字
    vo.setDbOldKousinsyanm(this.getFoOldKousinsyanm());// 初回登録者名漢字
    vo.setDbTokubaiTiku(this.getDeTokubaiTiku01().substring(0, 3));// 特売地区
    vo.setDbEdaban(this.getDeTokubaiTiku01().substring(3, 5));// 枝番
    vo.setDbTokubaiTikunm(this.getDeTkTikinm01());// 販売地区・括り№名称
    vo.setDbKukurino(null);// 括り№return vo;
    } /// @.@||~
      

  4.   

    public List convertToValueDetails() {resetDetails() ;
    List list = new ArrayList();if (!getHeTorokuKbn().equals("1")) return;在此有个小错误,当不等于1时,return new ArrayList();
    @.@||~
      

  5.   

    TO jtomcat_jack():
        "不好意思这是固定的不能重写方法只能在这里面放着"
        
        可我不明白的是,你可以将多个方法通过反射进行操作,却不能重构方法?难道通过反射就不是修改代码了吗?而且将代码提炼出来以private访问权限放入class中,不会产生任何副作用,难道日本人这都不允许?我和日本人合作的项目没有夸张到这个地步啊?@.@||~
      

  6.   

    midthinker(呵呵) 给我用发射实现下好吗?这个不行。代码已经固定好了。不能出现其他的代码了。
      

  7.   

    public List convertToValueDetails() {
    resetDetails() ;
       List list = new ArrayList();
    if (this.getHeTorokuKbn().equals("1")) {
            Class c = 你的这个类名.class;
            for(int i=1;i<=5;i++){
             String methodName = "getDeTokubaiTiku0" + i;
                Method e = c.getDeclaredMethod(methodName,new Class[0]);
                String temp = e.invoke(new 你的这个类名(),new Object[0]);
                if(!temp.equals(""))
                {             PP1101TRANValueObject vo = new PP1101TRANValueObject();
                 vo.setDbKikakuNo(EditStringPositionAndBlank.editRightZero(this.getHeKikakuNo(), 8));// 企画№
                 vo.setDbHojin(null);// 法人コード
                 vo.setDbSzkJigyosyo(null);// 所属事業所コード
                 vo.setDbNewDate(this.getFoNewDate()); // 最新更新日
                 vo.setDbNewAddress(null);// 最新更新アドレス
                 vo.setDbNewKousinsya(this.getFoNewKousinsya());// 最新更新者
                 vo.setDbOldKousinsya(this.getFoOldKousinsya());// 初回登録者
                 vo.setDbOldDate(this.getFoOldDate());// 初回登録日
                 vo.setDbNewKousinsyanm(this.getFoNewKousinsyanm());// 最新更新者名漢字
                          vo.setDbOldKousinsyanm(this.getFoOldKousinsyanm());// 初回登録者名漢字
                 vo.setDbTokubaiTiku(this.getDeTokubaiTiku01().substring(0, 3));// 特売地区
                 vo.setDbEdaban(this.getDeTokubaiTiku01().substring(3, 5));// 枝番
                 vo.setDbTokubaiTikunm(this.getDeTkTikinm01());// 販売地区&#12539;括り№名称
                 vo.setDbKukurino(null);// 括り№
                 ist.add(vo);
                
                }
            }
    }
    return list; }
      

  8.   

    小日本就是小日本,自己写的乱代码还不让改!按字符串分析它的类,放到XML中,动态生成 一个新类,加裁,实例化,运行就可以了。哈哈,怪!!!!!!!!!!!!!!!!
      

  9.   

    不让多写方法就用 midthinker(呵呵) 的方法。把getValueObject() 里面的内容写到convertToValueDetails()的if条件里不就完了
      

  10.   

    to kingdoom() 
    我的方法有参数要怎么传参数啊。????在线等待。
      

  11.   

    to kingdoom() 
    我的方法有参数要怎么传参数啊。????在线等待。
    谁能告诉我啊。他写的那个方法中假如有String类型的参数。。怎么办??
      

  12.   

    if (!this.getDeTokubaiTiku01().equals("") || !this.getDeTokubaiTiku02().equals("") || !this.getDeTokubaiTiku01().equals("")..... ) {
    PP1101TRANValueObject vo = new PP1101TRANValueObject();
    vo.setDbKikakuNo(EditStringPositionAndBlank.editRightZero(this.getHeKikakuNo(), 8));// 企画№
    vo.setDbHojin(null);//法人コード
    vo.setDbSzkJigyosyo(null);//所属事業所コード
    vo.setDbNewDate(this.getFoNewDate()); // 最新更新日
    vo.setDbNewAddress(null);//最新更新アドレス
    vo.setDbNewKousinsya(this.getFoNewKousinsya());// 最新更新者
    vo.setDbOldKousinsya(this.getFoOldKousinsya());// 初回登録者
    vo.setDbOldDate(this.getFoOldDate());// 初回登録日
    vo.setDbNewKousinsyanm(this.getFoNewKousinsyanm());// 最新更新者名漢字
             vo.setDbOldKousinsyanm(this.getFoOldKousinsyanm());// 初回登録者名漢字
    vo.setDbTokubaiTiku(this.getDeTokubaiTiku01().substring(0, 3));// 特売地区
    vo.setDbEdaban(this.getDeTokubaiTiku01().substring(3, 5));// 枝番
    vo.setDbTokubaiTikunm(this.getDeTkTikinm01());// 販売地区&#12539;括り№名称
    vo.setDbKukurino(null);//括り№
    ist.add(vo);
    }
      

  13.   

    看到这样的代码就没兴趣了。
    this.getHeTorokuKbn().equals("1")难道不知道 "1".equals(this.getHeTorokuKbn())???
      

  14.   

    to pigo
     你这个代码很好吗?
      

  15.   

    to zglluck(zglluck)
    你的代码不符合我的方法。我有个COUNT
      

  16.   

    简单……在里面加几个病毒程序进去……如果嫌Java写病毒太无厘头,那就加几个汇编代码的病毒进去,一切都搞定!
      

  17.   

    public List convertToValueDetails() {
    resetDetails() ;
       List list = new ArrayList();
    if (this.getHeTorokuKbn().equals("1")) {
            Class c = 你的这个类名.class;
            Class partypes[] = new Class[1];
            partypes[0] = String.class;
            for(int i=1;i<=5;i++){
            String methodName = "getDeTokubaiTiku0" + i;
                Method e = c.getDeclaredMethod(methodName,partypes);
                Object arglist[] = new Object[1];
                arglist[0] = new String("ss");
                String temp = e.invoke(new 你的这个类名(),arglist);
                if(!temp.equals(""))
                {            PP1101TRANValueObject vo = new PP1101TRANValueObject();
                vo.setDbKikakuNo(EditStringPositionAndBlank.editRightZero(this.getHeKikakuNo(), 8));// 企画№
                vo.setDbHojin(null);// 法人コード
                vo.setDbSzkJigyosyo(null);// 所属事業所コード
                vo.setDbNewDate(this.getFoNewDate()); // 最新更新日
                vo.setDbNewAddress(null);// 最新更新アドレス
                vo.setDbNewKousinsya(this.getFoNewKousinsya());// 最新更新者
                vo.setDbOldKousinsya(this.getFoOldKousinsya());// 初回登録者
                vo.setDbOldDate(this.getFoOldDate());// 初回登録日
                vo.setDbNewKousinsyanm(this.getFoNewKousinsyanm());// 最新更新者名漢字
                         vo.setDbOldKousinsyanm(this.getFoOldKousinsyanm());// 初回登録者名漢字
                vo.setDbTokubaiTiku(this.getDeTokubaiTiku01().substring(0, 3));// 特売地区
                vo.setDbEdaban(this.getDeTokubaiTiku01().substring(3, 5));// 枝番
                vo.setDbTokubaiTikunm(this.getDeTkTikinm01());// 販売地区&#12539;括り№名称
                vo.setDbKukurino(null);// 括り№
                ist.add(vo);
                
                }
            }
    }
    return list;}
    这样就可以传String参数了
      

  18.   

    还没有结贴吗?给你一个简单的测试代码吧,容易看一点:import java.lang.reflect.Method;public class ReflectTest { /**
     * @param args
     */
    public static void main(String[] args) {
    ReflectTest test = new ReflectTest();
    try {
    Class c = test.getClass();
    for (int i = 1; i <= 4; i++) {
    Method m = c.getMethod("method" + i, null);
    m.invoke(test, null);
    } Method m5 = c.getMethod("method5", new Class[] { Integer.TYPE, String.class });
    m5.invoke(test, new Object[] { new Integer(1), "hai" }); } catch (Throwable e) {
    System.err.println(e);
    }
    } public void method1() {
    System.out.println("This is method one");
    } public void method2() {
    System.out.println("This is method two");
    } public void method3() {
    System.out.println("This is method three");
    } public void method4() {
    System.out.println("This is method four");
    } public void method5(int arg1, String arg2) {
    System.out.println("This is method five. arg1 == " + arg1 + " arg2 == " + arg2);
    }}正如楼上whyxx(不知道该取个什么名字)所说,这会降低效率。