2013-01-03 67 views
2
private Set<String> extractOfferKeysForAbstractOffers(List<AbstractOfferDto> selectedOffers) { 
     Set<String> offerKeys = new HashSet<String>(); 
     for (AbstractOfferDto offer : selectedOffers) { 
      offerKeys.add(offer.getOfferKey()); 
     } 
     return offerKeys; 
    } 

private Set<String> extractOfferKeysForOffers(List<OfferDto> selectedOffers) { 
     Set<String> offerKeys = new HashSet<String>(); 
     for (OfferDto offer : selectedOffers) { 
      offerKeys.add(offer.getOfferKey()); 
     } 
     return offerKeys; 
    } 

而不是使用幾乎相同的方法只是輸入是不同的我想使用泛型。我是這樣創建的。如何使用不同輸入的相同方法的泛型

private <T> Set<String> extractOfferKeysForOffers(List<T> offers) { 
     Set<String> offerKeys = new HashSet<String>(); 
     for (T offer : offers) { 
      offerKeys.add(offer.getOfferKey()); 
     } 
     return offerKeys; 
    } 

但問題是offer.getOfferKey()不被識別。只有報價選項是AbstractOfferDtoOfferDto

如何在此示例中使用泛型?

+2

使用'T延伸CommonInterface' – Shivam

回答

4

是,您可以:

public interface IOffer { 
    String getOfferKey(); 
    } 

    public class OfferDto implements IOffer { ... } 

    public class AbstractOfferDto implements IOffer { ... } 

    class X {  
    private <T extends IOffer> Set<String> extractOfferKeysForOffers(List<T> offers) { 
     Set<String> offerKeys = new HashSet<String>(); 
     for (T offer : offers) { 
      offerKeys.add(offer.getOfferKey()); 
     } 
     return offerKeys; 
    } 
    } 

上面是通用的解決方案。如果OfferDto延伸AbstractOfferDto,不需要額外的接口:

class X {  
    private <T extends AbstractOfferDto> Set<String> extractOfferKeysForOffers(List<T> offers) { 
     Set<String> offerKeys = new HashSet<String>(); 
     for (T offer : offers) { 
      offerKeys.add(offer.getOfferKey()); 
     } 
     return offerKeys; 
    } 
    } 
+0

謝謝你的想法 – senzacionale

6

告訴抽象類型編譯:

private <T extends AbstractOfferDto> Set<String> extractOfferKeysForOffers(List<T> offers) { 
     Set<String> offerKeys = new HashSet<String>(); 
     for (T offer : offers) { 
      offerKeys.add(offer.getOfferKey()); 
     } 
     return offerKeys; 
    } 
+0

感謝您的想法,但優惠不適擴展抽象類。 – senzacionale

相關問題