элемент массива нельзя применить к другому списку - PullRequest
0 голосов
/ 13 октября 2018

У меня проблема со списком массивов.у меня есть следующее

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

, тогда я инициализирую так:

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

с Income был пользовательский класс с функцией getter и setters.после заполнения транзакцииList данными, я делаю это: selectedTransactionList.add ((Income) транзакцияList.get (1));

однако андроид выдает ошибку, такую ​​как: add (capture) в ArrayList не может бытьприменяется к (com.erod.finsec.Income)

Я объявляю массив как ArrayList, потому что у меня есть другие классы, которые мне нужны для создания списка массивов.например:

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

та же логика кода применяется для расходов и доходов и других, и я не хочу создавать отдельный класс с тем же кодом, но единственная разница в том, что любой список массивов - это доход, расход, другой тип.как я могу решить ошибку выше?

Ответы [ 4 ]

0 голосов
/ 13 октября 2018

Выглядит так, как будто вам нужен класс специально для общей абстракции.

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> {
0 голосов
/ 13 октября 2018

Просто укажите тип ArrayList при объявлении:

private ArrayList<Income> selectedTransactionList;
private ArrayList<Income> transactionList;
0 голосов
/ 13 октября 2018

Я бы предложил вам создать базовый абстрактный класс / интерфейс и расширить / реализовать его в ваших 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;
0 голосов
/ 13 октября 2018

ArrayList<?> не позволяет добавлять элементы к нему, как вы могли бы прочитать на https://docs.oracle.com/javase/tutorial/extra/generics/wildcards.html Я предлагаю изменить тип <?> на <T>, а затем использовать универсальный класс для этого

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...