gpt4 book ai didi

java - 通用类问题!

转载 作者:行者123 更新时间:2023-12-01 16:11:11 25 4
gpt4 key购买 nike

我已经研究了一整天,但找不到解决方案。我理解使用子类的问题以及编译器如何不知道该类实际上是什么,因为在调用 add 之前可以将其设置为其他内容。我到处都看过,但仍然不知道如何解决这个问题。我有一个抽象类,它是文件包装器。文件包装器有一个包装器的数组列表。我希望 excelfile 的具体类能够将 excelsheets 添加到其数组列表中,但我不断收到此错误:

ArrayList 类型中的方法 add(capture#2-of ? extends SheetWrapper) 不适用于参数 (ExcelSheet)

这是必要的代码。这里只粘贴涉及到错误的部分。ExcelSheet也是一个抽象类。任何帮助将非常感谢。谢谢!

public abstract class FileWrapper {

protected ArrayList<? extends SheetWrapper> sheets;


public class ExcelFile extends FileWrapper {

this.sheets = new ArrayList<ExcelSheet>();
for(int i = 0; i < wb.getNumberOfSheets(); i++)
{
if(ParserTools.isLegitSheet(wb.getSheetAt(i)))
{
this.sheets.add(new ExcelSheet(null)); //ERROR HERE
}
}

最佳答案

好吧,您将变量声明为“扩展 SheetWrapper 的一些元素的 ArrayList”。这意味着您无法向其中添加 ExcelSheet 实例,因为它实际上可能是扩展 SheetWrapper 的其他类型的 ArrayList

更准确地说,add() 不是协变的。

如果您的所有代码实际上都在同一个位置,那么只需在分配之前填写您的列表即可:

ArrayList<ExcelSheet> sheets = new ArrayList<ExcelSheet>();
for(int i = 0; i < wb.getNumberOfSheets(); i++)
{
if(ParserTools.isLegitSheet(wb.getSheetAt(i)))
{
sheets.add(new ExcelSheet(null)); //ERROR HERE
}
}
this.sheets = sheets;

如果您需要从代码的不同部分执行此操作,只需将该本地字段提升为与继承的 sheets 一起的另一个私有(private)或 protected 字段(例如 excelSheets),并且使用它。

关于java - 通用类问题!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1162628/

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