1

我有一个方法并作为参数发送列表。该方法如下所示:

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()。我可以转换为所需的类型,但它只是一种具体类型,并且不能用于其他参数......

有没有办法解决我的问题?谢谢。

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

您确实定义了一个接口,该接口强制类实现 getRegres()。然后为您需要和使用的所有类实现此接口:

interface Interface {
  <type> getregres();
}

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

所有类型QueueSueDTO都必须实现一个通用接口。这样你就可以将你的函数声明为setSanctionTypes(List<? extends QueueDTO> items).

该接口必须包含getRegres您发现与所有类相关的任何其他函数,这些函数用作以下参数的参数setSanctionTypes

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