[英]Avoiding 'Unchecked Call' warning
說我有一個帶有方法getTransformer(Item item)
的工廠接口Item是一個接口。 工廠使用instanceOf
為項目到實體找到正確的轉換器。 變壓器實現方法S transform(T item)
。
調用工廠來獲取轉換器是可以的,但是在IDE中突出顯示了調用transformer.transform
是未經檢查的對transform(T)
調用。 如何避免這種情況? 即
DTOTransformer dtoTransformer = dtoTransformerFactory.getTransformer(item);
ItemEntity itemEntity = dtoTransformer.transform(item); // this line has error
順便說一句,這是為即時采訪而寫的,我明天要去采訪。 我想知道這是否可以解決,或者只是使用未選中的注釋來避免編譯器警告。
public interface DTOTransformer<S extends ItemEntity, T extends Item> {
S transform(T item);
}
public interface DTOTransformerFactory {
DTOTransformer getTransformer(Item item);
}
public class DTOTransformerFactoryImpl implements DTOTransformerFactory {
@Override
public DTOTransformer getTransformer(Item item) {
if (item instanceof RegularItemDTO) {
return new RegularDTOTransformer();
} else if (item instanceof SpecialItemDTO) {
return new SpecialDTOTransformer();
} else {
throw new IllegalArgumentException("No transformer for type: " + item.getClass());
}
}
}
public class SpecialDTOTransformer implements DTOTransformer<SpecialItemEntity, SpecialItemDTO> {
@Override
public SpecialItemEntity transform(SpecialItemDTO item) {
SpecialItemEntity specialItemEntity = new SpecialItemEntity();
specialItemEntity.setPrice(item.getPrice());
specialItemEntity.setSku(item.getSku());
specialItemEntity.setItem(item.getItem());
specialItemEntity.setBuyAmount(item.getBuyAmount());
specialItemEntity.setDiscountPrice(item.getDiscountPrice());
return specialItemEntity;
}
}
dtoTransformer
沒有類型參數,因此具有原始類型。
您需要在工廠中添加一些類型參數:
public interface DTOTransformerFactory {
DTOTransformer<?, Item> getTransformer(Item item);
// ^-------^ Here
}
public class DTOTransformerFactoryImpl implements DTOTransformerFactory {
@Override
public DTOTransformer<?, Item> getTransformer(Item item) {
// ^-------^ Here
if (item instanceof RegularItemDTO) {
return new RegularDTOTransformer<>();
// ^^ Here, assuming RegularDTOTransformer is similarly parametrized.
} else if (item instanceof SpecialItemDTO) {
return new SpecialDTOTransformer<>();
// ^^ Here.
} else {
throw new IllegalArgumentException("No transformer for type: " + item.getClass());
}
}
}
然后:
DTOTransformer<?, Item> dtoTransformer = dtoTransformerFactory.getTransformer(item);
ItemEntity itemEntity = dtoTransformer.transform(item); // this line has error
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.