2011-10-20 22 views
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()。我可以轉換爲所需的類型,但它只會是一種具體類型,並且不會用於其他參數...

有沒有辦法解決我的問題? 謝謝。

+0

什麼關於使用Java的Reflection來找出對象的類? – anonymous1fsdfds

回答

1

你必須定義一個強制類實現getRegres()的接口。然後你實現這個接口對您需要的所有類別和用途:

interface Interface { 
    <type> getregres(); 
} 

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

如果在定義方法的這些類的根上有一個類,它也可以工作。一個界面非常好用,但泛型無法運行。 –

1

的所有類型,如QueueSueDTO必須實現一個共同的接口。這樣你就可以聲明你的函數爲setSanctionTypes(List<? extends QueueDTO> items)

接口必須包含getRegres和作爲參數傳遞給setSanctionTypes你找到相關的所有類的任何其它功能,:

interface QueueDTO 
{ 
    RegresType getRegres(); 
    // maybe some more methods 
} 
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

相關問題