Java 有没有更好的方法可以在继承类时处理泛型基类?
我在使用和理解泛型方面有问题。我以前使用过泛型,但现在我已经到了无法再进一步的地步 这是我的基本课程,应该由其他课程扩展:Java 有没有更好的方法可以在继承类时处理泛型基类?,java,generics,inheritance,Java,Generics,Inheritance,我在使用和理解泛型方面有问题。我以前使用过泛型,但现在我已经到了无法再进一步的地步 这是我的基本课程,应该由其他课程扩展: public class BaseFiller<T> { private WorkBook workBook; private List<T> act_Bwa; private List<T> act_Balance; private List<T> p_l_v_e_L; public BaseFiller(WorkBo
public class BaseFiller<T> {
private WorkBook workBook;
private List<T> act_Bwa;
private List<T> act_Balance;
private List<T> p_l_v_e_L;
public BaseFiller(WorkBook workBook,
List<T> act_Bwa,
List<T> act_Balance,
List<T> p_l_v_e_L) {
this.workBook = workBook;
this.act_Bwa = act_Bwa;
this.act_Balance = act_Balance;
this.p_l_v_e_L = p_l_v_e_L;
}
protected static <T> Predicate<T> distinctByProperty(Function<? super T, ?> keyExtractor) {
Map<Object, Boolean> seen = new ConcurrentHashMap<>();
return t -> seen.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null;
}
protected static <T> Map<Integer, String> mapListToMap(Collection<? extends T> entityList, Function<? super T, Integer> intProperty,
Function<? super T, String> stringProperty) {
return entityList.stream()
.collect(Collectors.toMap(intProperty, stringProperty));
}
//Getter & Setter
}
公共类基址填充程序{
私人工作手册;
私人名单法;
私人名单法;
私人名单p_l_v_e_l;
公共基线填充器(工作簿、,
罗列法案(Bwa),,
列出法案平衡,
列表p_l_v_e_l){
this.workBook=工作簿;
本法案uBwa=行为_uBwa;
this.act\u Balance=act\u Balance;
this.p_l_v_e_l=p_l_v_e_l;
}
受保护的静态谓词distinctByProperty(函数键提取器){
Map seen=新的ConcurrentHashMap();
返回t->seen.putIfAbsent(keydextractor.apply(t),Boolean.TRUE)==null;
}
受保护的静态映射列表映射(集合使用addAll
而不是add
,但存在简化:
List<ResultlinevaluesEntity> res = new ArrayList<>();
for (List<ResultlinevaluesEntity> actBwa : getAct_Bwa()) {
res.add(actBwa);
}
List<ResultlinevaluesEntity> res = new ArrayList<>();
res.addAll(getAct_Bwa());
List<ResultlinevaluesEntity> res = new ArrayList<>(getAct_Bwa());
和容器基类ContainerBase
class ContainerBase<T extends ItemBase>
List<T> items
List<T> getItems();
class ContainerA extends ContainerBase<ItemA>
class ContainerB extends ContainerBase<ItemB>
您确定要像这样继承FinanceBalanceFiller extends BaseFiller
而不是像这样继承FinanceBalanceFiller extends BaseFiller
?在我的例子中,问题是,我在这个类中至少有两种不同的类型。重点是,在您的行中(列表列表:getAct\u Bwa()){
,你假设T
是列表
,但是这个假设在其他任何地方都不能保证。是的,我不想让它影响列表的类型…我也已经明确了我的目标。谢谢,是的,简化存在。但是我想我在问题的第一个版本中不清楚。所以我想要这个键入与此无关。无论列表的类型如何。也可以编辑我的问题好的,很好的解释。给了我一个很好的新视角。谢谢:)
List<ResultlinevaluesEntity> res = new ArrayList<>();
for (List<ResultlinevaluesEntity> actBwa : getAct_Bwa()) {
res.add(actBwa);
}
List<ResultlinevaluesEntity> res = new ArrayList<>();
res.addAll(getAct_Bwa());
List<ResultlinevaluesEntity> res = new ArrayList<>(getAct_Bwa());
class ItemBase
class ItemA extends ItemBase
class ItemB extends ItemBase
class ContainerBase<T extends ItemBase>
List<T> items
List<T> getItems();
class ContainerA extends ContainerBase<ItemA>
class ContainerB extends ContainerBase<ItemB>
class ContainerBase
List<ItemBase> items;
public List<ItemBase> getItems();
class ContainerA extends ContainerBase
@Override
public List<ItemA> getItems() {
return items.stream().map(ItemA.class::cast).collect(Collectors.toList());
}
class ContainerB extends ContainerBase
@Override
public List<ItemB> getItems() {
return items.stream().map(ItemB.class::cast).collect(Collectors.toList());
}