0

我必须将这种重复和重复的代码概括为一个方法是否可能?

//attrrischio
        SagTblObjAttrischioang sagTblObjAttrischioang = elemtOut.getAttrischio();

        if(sagTblObjAttrischioang.length()>0)
        {
            for (int j = 0; j <sagTblObjAttrischioang.length(); j++) {
                SagObjAttrischioang item = sagTblObjAttrischioang.getElement(j);

                System.out.println(ToStringEntities.toString(item));
            }
        }

//          beni

SagTblObjBeniang sagTblObjBeniang = elemtOut.getBeni();

        if(sagTblObjBeniang.length()>0)
        {
            for (int j = 0; j <sagTblObjBeniang.length(); j++) {
                SagObjBeniang item = sagTblObjBeniang.getElement(j);

                System.out.println(ToStringEntities.toString(item));
            }
        }

一遍又一遍

4

6 回答 6

2

如果您在两个循环中需要的所有行为都是打印每个项目的 toString(),那么这样的方法就足够了:

public void printItems(Iterator<Object> items){
    while(items.hasNext()){
        Object item = items.next();
        System.out.println(item.toString());
    }
}

您可以在其中覆盖toString所有实体的方法,以您需要的格式打印。

于 2013-08-28T10:09:35.700 回答
1

两者都SagTblObjAttrischioang实现SagTblObjBeniang了一个通用接口(例如SagTabObj,实现方法lengthgetElement返回另一个common interface SabTab.

然后创建一个通用方法,例如

public void printItems(SabTabObj item){
   if(item.length()>0)
    {
        for (int j = 0; j < item.length(); j++) {
            SagTab sabTab = item.getElement(j);

            System.out.println(ToStringEntities.toString(sabTab));
        }
    }
}
于 2013-08-28T10:20:49.230 回答
0

我看到您的SagObjAttrischioangSagTblObjBeniang(无论是什么?)类都支持一种getElement(int)方法。如果它们既不是从抽象类继承也不是实现接口,那么您应该重构这些类的代码。然后你可以将你重构elemtOut为这个抽象类或接口的集合,这将使迭代更容易。你为什么不发布你正在使用的课程的代码?我认为您的课程设计需要一些改进。

于 2013-08-28T10:20:45.277 回答
0

我想到了两个解决方案:

  1. 您应该使您的类实现相同的接口(或从同一类继承)。有关这种可能性,请参见 Sajan Chandran 的回答。
  2. 它可能看起来很愚蠢,但如果你的类只实现SagObjAttrischioangand ,为什么不使用 List 呢?(甚至收藏)。SagTblObjBenianglenght()getElement(int)
于 2013-08-28T10:28:55.810 回答
0

如果您想同时涵盖数组和 Iterable (这是您所关心的接口......因为您需要遍历它们)。使用类似的东西:

import java.util.Arrays;

[...]

public static void printAll(Object[] stuff) {
    printAll(Arrays.asList(stuff));
}

public static void printAll(Iterable<?> stuff) {
    for (Object o : stuff) {
        System.out.println(o);
    }
}

您需要两个函数,因为 Java 中有一种特殊的对象,即数组。“foreach”循环将处理集合为空的情况(顺便说一下,正常的 for 循环也是如此,检查 length > 0 只会为您节省一个 int 声明)。

如果对象不是原始基本类型之一(byte、char、short、int、long、float、double 和 boolean),则在 println() 上也会自动调用 object.toString(),因此无需自己使用它代码(使您的代码尽可能短)。

于 2013-08-28T10:24:55.337 回答
-1

如何将其封装在:

public void myMethod()
{
  ... your code...
}

然后循环:

while (true)
  myMethod();

应该这样做:)

于 2013-08-28T10:07:24.860 回答