我有一个方法,并作为参数发送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()。我可以投射到所需类型,但它只是一种具体类型,它不能用于其他参数......
有办法解决我的问题吗? 感谢。
答案 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
}