Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 有没有更好的方法可以在继承类时处理泛型基类?_Java_Generics_Inheritance - Fatal编程技术网

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());
    }