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を実装します (たとえば、とのようなメソッドを実装し、別の.SagTblObjBeniangSagTabObjlengthgetElementcommon 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

配列と 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 の配列である特殊な種類のオブジェクトのため、2 つの関数が必要です。「foreach」ループは、コレクションが空の場合に対処します (ちなみに、通常の for ループもそうです。長さ > 0 をチェックすると、int 宣言のみが保存されます)。

また、オブジェクトがプリミティブ基本型 (byte、char、short、int、long、float、double、boolean) のいずれでもない場合、object.toString() は println() で自動的に呼び出されるため、自分で使用する必要はありません。コード (コードはできるだけ短くしてください)。

于 2013-08-28T10:24:55.337 に答える
0

あなたのクラスSagObjAttrischioangと(それらが何であれ)クラスの両方がメソッドSagTblObjBeniangをサポートしていることがわかります。getElement(int)どちらも抽象クラスから継承しないか、インターフェイスを実装しない場合は、これらのクラスのコードをリファクタリングする必要があります。次に、この抽象クラスまたはインターフェイスの Collection にリファクタリングできますelemtOut。これにより、反復処理がはるかに簡単になります。使用しているクラスのコードを投稿してみませんか? あなたのクラスのデザインには改善が必要だと思います。

于 2013-08-28T10:20:45.277 に答える
-1

それをカプセル化するのはどうですか:

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

そしてループします:

while (true)
  myMethod();

それはそれを行う必要があります:)

于 2013-08-28T10:07:24.860 に答える