方法接收更多数据类型的列表作为参数

时间:2011-10-20 09:29:06

标签: java list casting type-conversion method-parameters

我有一个方法,并作为参数发送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);
    }
}

我需要将此方法用于不同的List数据类型参数(例如setSanctionTypes(List<QueuePaymentDTO> items);等)。 我想作为参数发送的所有clases都有方法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()。我可以投射到所需类型,但它只是一种具体类型,它不能用于其他参数......

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

您已经定义了一个强制类实现getRegres()的接口。然后为所需的所有类实现此接口并使用:

interface Interface {
  <type> getregres();
}

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

答案 2 :(得分:1)

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

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

interface QueueDTO
{
    RegresType getRegres();
    // maybe some more methods
}