arraylist项不能应用于另一个列表

时间:2018-10-13 17:03:12

标签: java android arraylist casting

我对数组列表有问题。我有以下

 private ArrayList<?> selectedTransactionList;
  private ArrayList<?> transactionList;

然后我要像这样初始化:

 selectedTransactionList = new ArrayList<Income>();
 transactionList = new ArrayList<Income>();

with Income是具有getter和setters函数的自定义类。 用数据填充transactionList之后,我正在这样做: selectedTransactionList.add((Income)transactionList.get(1));

但是,android给出了如下错误: 不能在ArrayList中添加(捕获) 到(com.erod.finsec.Income)

iam将数组声明为ArrayList,因为我还有其他需要创建数组列表的类。例如:

  selectedTransactionList = new ArrayList<Expense>();
     transactionList = new ArrayList<Expense>(); 

相同的代码逻辑适用于费用和收入以及其他,我不希望使用相同的代码创建单独的类,但是唯一的区别是数组列表是Income,expense和其他类型。 我该如何解决以上错误?

4 个答案:

答案 0 :(得分:0)

ArrayList<?>不允许向其中添加元素,就像您在https://docs.oracle.com/javase/tutorial/extra/generics/wildcards.html上看到的那样 我建议将类型<?>更改为<T>,然后为此使用通用类

答案 1 :(得分:0)

在声明时只需指定ArrayList类型:

private ArrayList<Income> selectedTransactionList;
private ArrayList<Income> transactionList;

答案 2 :(得分:0)

我建议您创建基本抽象类/接口,并在您的IncomeExpense类中对此进行扩展/实现。

您可以创建如下所示的界面

interface Item {
  // add common methods if required
}

然后只需实现此接口

class Income implements Item {
  // Keep rest of the code as it is
}
class Expense implements Item {
  // Keep rest of the code as it is
}

然后声明您的类型Item的列表。

private List<Item> selectedTransactionList;
private List<Item> transactionList;

答案 3 :(得分:0)

似乎您想要一个专门用于通用抽象的类。

class Transactions<T> {
    private final List<?> selectedTransactionList = new ArrayList<T>();
    private final List<?> transactionList = new ArrayList<T>();
}

(请注意,复数是正确的情况。)

专门处理Income的代码将其用作:

Transaction<Income> transactions = new Transaction();

Expense类似。

Transaction<Expense> transactions = new Transaction();

如果IncomeExpense之间有一个公共接口,请将其添加为Transaction类类型参数的绑定。这允许Transaction中的方法使用通用类型中的方法。

class Transactions<T extends RelevantAccountancyTerm> {