Java 如何对具有不同输入的相同方法使用泛型 专用集extractOfferKeysForAbstractOffers(列出选定的供应商){ Set offerKeys=新的HashSet(); for(AbstractOfferdToOffer:selectedOffers){ add(offer.getOfferKey()); } 还盘; } 专用集合ExtractOfferKeyForOffers(列出选定的供应商){ Set offerKeys=新的HashSet(); for(OfferDto offer:selectedOffers){ add(offer.getOfferKey()); } 还盘; }
与使用几乎相同的方法不同的是,我想使用泛型。我是这样创造的Java 如何对具有不同输入的相同方法使用泛型 专用集extractOfferKeysForAbstractOffers(列出选定的供应商){ Set offerKeys=新的HashSet(); for(AbstractOfferdToOffer:selectedOffers){ add(offer.getOfferKey()); } 还盘; } 专用集合ExtractOfferKeyForOffers(列出选定的供应商){ Set offerKeys=新的HashSet(); for(OfferDto offer:selectedOffers){ add(offer.getOfferKey()); } 还盘; },java,Java,与使用几乎相同的方法不同的是,我想使用泛型。我是这样创造的 private Set<String> extractOfferKeysForAbstractOffers(List<AbstractOfferDto> selectedOffers) { Set<String> offerKeys = new HashSet<String>(); for (AbstractOfferDto offer : selected
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 Set extractOfferKeysForOffers(列出优惠){
Set offerKeys=新的HashSet();
对于(T报价:报价){
add(offer.getOfferKey());
}
还盘;
}
但问题是,offer.getOfferKey()
无法识别。报价的唯一选项是abstractOfferTo
或OfferTo
如何在此示例中使用泛型?告诉编译器抽象类型:
private <T> Set<String> extractOfferKeysForOffers(List<T> offers) {
Set<String> offerKeys = new HashSet<String>();
for (T offer : offers) {
offerKeys.add(offer.getOfferKey());
}
return offerKeys;
}
private Set extractOfferKeysForOffers(列出优惠){
Set offerKeys=新的HashSet();
对于(T报价:报价){
add(offer.getOfferKey());
}
还盘;
}
是,您可以:
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;
}
使用
T扩展CommonInterface
感谢您的想法,但该提议不是抽象类的扩展。
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;
}
}
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;
}
}