Функция добавления arraylist не работает для любого типа класса, я передаю ему - PullRequest
0 голосов
/ 23 сентября 2018

Я сталкиваюсь с некоторыми проблемами в программировании Android / Java.Я хочу объявить arraylist, который может содержать любой тип класса.моя переменная списка массивов выглядит следующим образом.private ArrayList TransactionsList;

У меня есть различные классы, такие как класс дохода, класс дебета, класс кредитной карты, класс событий.эти классы имеют свои собственные методы get и set.Я читаю данные из базы данных и вызываю мои методы set, а затем добавляю этот объект класса в мой массив.например,

 Cursor data = connectionDB.getListContents(selectQuery);
        Income income;
        transactionList = new ArrayList<Income>();
        transactionList.clear();

        while (data.moveToNext()) {
            income = new Income();

            income.setIncomeAmount(data.getString(0));
            income.setFrequency(data.getString(1));
            income.setDatePaid(data.getString(2));
            income.setCategory(data.getString(3));
            income.setDepositTo(data.getString(4));
            income.setDescription(data.getString(5));
            income.setRecordSetId(data.getString(6));
            income.setRowid(data.getString(7));
            income.setStatus(data.getString(8));

            income.setColumnValues(
                    data.getColumnName(0)
                    , data.getColumnName(1)
                    , data.getColumnName(2)
                    , data.getColumnName(3)
                    , data.getColumnName(4)
                    , data.getColumnName(5)
                    , data.getColumnName(6)
                    , data.getColumnName(7)
                    , data.getColumnName(8)
            );



            transactionList.add(income);
        }

, как вы можете видеть выше, я создаю новый массив данных о доходах

 transactionList = new ArrayList<Income>();

, но студия android выдает ошибку при добавлении дохода в массив, например транзакции.добавить (доход);«add (capture) в arrayList не может быть применен к (com.finsec.Income)»

Я искал другие сообщения, но не смог найти ответ, который искал.я хотел бы выполнить две вещи: 1. объявить arraylist любого типа класса и добавить к arraylist.например

 Income income = new Income();
   transactionList = new ArrayList<Income>();
   transactionList.add(income);

   Debit debit= new Debit();
   transactionList = new ArrayList<Debit>();
   transactionList.add(debit);

   Events events= new Events();
   transactionList = new ArrayList<Events>();
   transactionList.add(events);   

я хочу передать список массивов функции print_arraylist (TransactionsList)

Я не уверен, как объявить параметр в функции, которую я предполагаю, является public void TransactionsList (список ArrayList)
и внутри функции используйте instanceOf.не уверен

Может ли кто-нибудь помочь и дать мне знать, как реализовать и создать массив любого класса, а также добавить его в массив и передать его в функцию?заранее спасибо

Ответы [ 2 ]

0 голосов
/ 24 сентября 2018
  1. Ваш код выглядит правильно.Если вы получаете «add (capture) в arrayList не может быть применено к (com.finsec.Income)», то похоже, что вы пропускаете важные фрагменты кода, такие как что-то, что объявляет переменную с именем «capture».Я могу запустить ваш код в Android Studio, нет ошибок времени компиляции или времени выполнения.

2.

void print_transactions(ArrayList transactionList)
{
    for (Object obj : transactionList) {
        System.out.println(obj.toString());
    }
}

Вы можете переопределить 'public String toString ()... »в каждом из ваших классов, чтобы отобразить его именно так, как вы хотите, чтобы он отображался.Если вы не хотите использовать toString () по какой-либо причине, вам нужно определить базовый класс или интерфейс, который используют все эти классы, и этот интерфейс определит методactionToString (), и всеклассы должны были бы реализовать это.

0 голосов
/ 24 сентября 2018

Вы должны определить переменную ArrayList следующим образом:

ArrayList<Income> a = new ArrayList<Income>();
ArrayList<debit> b = new ArrayList<debit>();

Если вы хотите передать универсальный массив данных в функцию, можете сделать так:

public void yourFun(ArrayList<?> arrayList, Class<Income> type) {
    for (Object o : arrayList) {
        if (o != null && o.getClass() == type) {
            //do something
        }
    }
}

и вызвать функцию какэто:

        ArrayList<Income> transactionList = new ArrayList<Income>();
        Income obj = new Income();
        transactionList.add(obj);
        yourFun(transactionList, Income.class);
...