如何传入/使用.Class / Object作为方法参数

时间:2019-02-15 20:19:24

标签: java google-cloud-firestore

我有各种CSV文件,它们代表需要添加到Cloud FireStore的不同类。我使用CSV例程库将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文件/类/云Firestore元组的参数调用的方法。传递csv文件名和Cloud Firestore Collection路径很容易,但是我在类上遇到了麻烦。它在for-each循环中发挥了两次作用-一次作为一个对象,一次作为'.class'事物。这是我到目前为止(尚未编译)的内容。

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 :(得分:0)

感谢David Conrad的提示

这是一个可行的解决方案

 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();
    }
}