Как передать / использовать .Class / Object в качестве параметра метода - PullRequest
0 голосов
/ 15 февраля 2019

У меня есть различные CSV-файлы, представляющие разные классы, которые необходимо добавить в Cloud FireStore.Я использую библиотеку CSV Routines для преобразования записей CSV из определенного файла CSV в объекты определенного класса, а затем добавляю каждый объект в определенную коллекцию Cloud FireStore

Этот код работает

try {
        InputStreamReader is = new InputStreamReader(getAssets()
                .open("fullvar3.csv"));

        CsvRoutines routines = new CsvRoutines();

        FirebaseFirestore firestore = FirebaseFirestore.getInstance();
        for (Variety v : routines.iterate(Variety.class, is)) {
            firestore.collection("/static/test/DFLKJDF39494/varieties").add(v);
        }
    } catch(IOException ex){
        System.out.println("Exception");
        ex.printStackTrace();
    }

Существует довольно много CSV-файлов, каждый из которых представляет свой класс.В Cloud FireStore также есть различные соответствующие коллекции, в которые необходимо добавить содержимое.

Я хотел бы создать один метод, который можно вызывать с параметрами для каждого кортежа CSV-файлов / классов / облачных хранилищ.Передать имя файла csv и путь к Cloud Firestore Collection достаточно просто, но у меня возникли проблемы с классом.Он вступает в игру дважды в цикле for-each - один раз как объект и один раз как «класс».Вот что у меня есть (не компилируется).

public void addToCloudStore(String filename, String path, Class cl){
    try {
        InputStreamReader is = new InputStreamReader(getAssets()
                .open(filename));

        CsvRoutines routines = new CsvRoutines();
        FirebaseFirestore firestore = FirebaseFirestore.getInstance();

        Object obj = new Object();
        cl.cast(obj);
        for (obj : routines.iterate(cl, is)) {
            firestore.collection(path).add(obj);
        }
    } catch(IOException ex){
        System.out.println("Exception");
        ex.printStackTrace();
    }
}

Как это можно изменить для работы?

1 Ответ

0 голосов
/ 15 февраля 2019

Спасибо Дэвиду Конраду за советы

Вот рабочее решение

 public void addToCloudStore(String filename, String path, Class<?> cl){
    try {
        InputStreamReader is = new InputStreamReader(getAssets()
                .open(filename));
        CsvRoutines routines = new CsvRoutines();
        FirebaseFirestore firestore = FirebaseFirestore.getInstance();
        for (Object obj : routines.iterate(cl, is)) {
            firestore.collection(path).add(obj);
        }

    } catch(IOException ex){
        System.out.println("Exception");
        ex.printStackTrace();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...