我对数组列表有问题。我有以下
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和其他类型。 我该如何解决以上错误?
答案 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)
我建议您创建基本抽象类/接口,并在您的Income
和Expense
类中对此进行扩展/实现。
您可以创建如下所示的界面
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();
如果Income
和Expense
之间有一个公共接口,请将其添加为Transaction
类类型参数的绑定。这允许Transaction
中的方法使用通用类型中的方法。
class Transactions<T extends RelevantAccountancyTerm> {