在Java中的对象集合上推广迭代函数

时间:2013-08-28 10:02:36

标签: java

我必须将这个重复和重复的代码概括为单一方法吗?

//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));
            }
        }

一遍又一遍

6 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

SagTblObjAttrischioangSagTblObjBeniang都实现了一个公共接口(例如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));
        }
    }
}

答案 2 :(得分:0)

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

答案 3 :(得分: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”循环将处理集合为空的情况(顺便说一下,循环的正常情况,检查长度&gt; 0只保存int声明)。

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

答案 4 :(得分:0)

我想到两个解决方案:

  1. 您应该使您的类实现相同的接口(或从同一个类继承)。看Sajan Chandran回答这种可能性。
  2. 可能看起来很愚蠢,但如果您的课程SagObjAttrischioangSagTblObjBeniang仅实施lenght()getElement(int),为什么不使用List呢? (甚至收藏)。

答案 5 :(得分:-1)

如何将其封装在:

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

然后循环:

while (true)
  myMethod();

应该这样做:)

相关问题