gpt4 book ai didi

java - 通用列表出现问题并添加包装器

转载 作者:行者123 更新时间:2023-11-30 06:37:28 25 4
gpt4 key购买 nike

我承认我没有太多使用 Java 泛型的经验。

现在,我正在使用泛型改造一些旧代码,以减少/简化由一位已离开公司的同事编写的现有代码。

基本上,我正在处理的系统有 6 种请求类型:1 种通用请求类型和 5 种继承自通用请求类型的特定请求类型。每个请求类型都有关联的任务类型。

这是我遇到问题的代码:

public class GeneralRequest implements Serializable {
protected List<? extends GeneralTask> taskList;

public <E extends GeneralTask> boolean addTask(E newTask) {
boolean returnvalue = false;

if(!this.taskList.contains(newTask)){
returnvalue = taskList.add(newTask);
}
return returnvalue;
}
}

public class AnnexationRequest extends GeneralRequest implements Serializable {
public AnnexationRequest(List<AnnexationTask> tal) {
this.taskList = tal;
}
}

问题出在 GeneralRequest 中的添加行。正如目前所写,taskList.add 行炸弹与

The method add(capture#6-of ? extends GeneralTask) in the type List<capture#6-of ? extends GeneralTask> is not applicable for the arguments (E)

现在,如果我将 taskList 声明更改为

protected List<? super GeneralTask> taskList;

它解决了这个问题,但是子类给了我一个不同的错误,比如在 AnnexationRequest 中:

Type mismatch: cannot convert from List<AnnexationTask> to List<? super GeneralTask>

我该如何修复它以便 addTask 正常工作并且我仍然可以从构造函数中设置任务列表?

最佳答案

public class GeneralRequest<E extends GeneralTask> implements Serializable {

private final List<E> taskList;

protected GeneralRequest(List<E> taskList) {
this.taskList = taskList;
}

public boolean addTask(E newTask) {
if(this.taskList.contains(newTask))
return false;
taskList.add(newTask);
return true;
}

}

public class AnnexationRequest extends GeneralRequest<AnnexationTask> {
public AnnexationRequest(List<AnnexationTask> tal) {
super(tal);
}
}

关于java - 通用列表出现问题并添加包装器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3480395/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com