1

メソッドがあり、パラメーターとして List を送信します。メソッドは次のようになります。

public static void setSanctionTypes(List<QueueSueDTO> items) {

    for (QueueSueDTO dto : items) {

        StringBuffer sb = sanctionTypeRutine(dto.getRegres().getDebtors());

        String sanctionType = sb.toString();
        dto.setSanctionType(sanctionType);
    }
}

このメソッドをさまざまなリスト データ型パラメーター (たとえばsetSanctionTypes(List<QueuePaymentDTO> items);など) に使用する必要があります。パラメータとして送信したいすべてのクラスにはメソッドがgetRegres()あるため、メソッドの内容setSanctionTypes()は共通であり、送信したいこれらすべてのクラスで使用できます。

私がこれをしたら

public static void setSanctionTypes(List<?> items) {

    for (Object dto : items) {

        StringBuffer sb = sanctionTypeRutine(dto.getRegres().getDebtors());

        String sanctionType = sb.toString();
        dto.setSanctionType(sanctionType);
    }
}

Object 型の dto は、getRegres() について認識していません。必要な型にキャストできますが、具象型は 1 つだけになり、他のパラメーターには使用できません...

私の問題を解決する方法はありますか? ありがとう。

4

3 に答える 3

2

getRegres()メソッドを宣言するインターフェースがあり、リストエントリがそれを実装している場合:

public static void setSanctionTypes(List<? extends YourInterface> items) {

    for (YourInterface dto : items) {

        StringBuffer sb = sanctionTypeRutine(dto.getRegres().getDebtors());

        String sanctionType = sb.toString();
        dto.setSanctionType(sanctionType);
    }
}

「ジェネリック」の詳細については、http://download.oracle.com/javase/tutorial/java/generics/index.htmlを参照してください。

于 2011-10-20T09:34:21.163 に答える
1

のようなすべてのタイプQueueSueDTOは、共通のインターフェースを実装する必要があります。このようにして、関数をとして宣言しますsetSanctionTypes(List<? extends QueueDTO> items)

インターフェイスにはgetRegres、すべてのクラスに関連すると思われるその他の関数が含まれている必要があります。これらの関数は、 setSanctionTypes:への引数として使用されます。

interface QueueDTO
{
    RegresType getRegres();
    // maybe some more methods
}
于 2011-10-20T09:33:25.630 に答える
1

クラスに getRegres() の実装を強制するインターフェースを定義する必要があります。次に、必要で使用するすべてのクラスにこのインターフェイスを実装します。

interface Interface {
  <type> getregres();
}

public static void setSanctionTypes(List<? extends Interface> items) {
于 2011-10-20T09:32:43.477 に答える