java - 使用字符串类名实例化通用变量

标签 java csv generics

我正在使用谷歌的 CSVReader,它需要一个类名来创建解析器。使用解析器,我将 CSV 文件读入列表。

考虑这段代码:

ValueProcessorProvider provider = new ValueProcessorProvider();
    CSVEntryParser<A> entryParser = new AnnotationEntryParser<A>(A.class, provider);

    CSVReader<A> newExternalFileCSVReader = 
            new CSVReaderBuilder<A>(m_NewExternalFile).entryParser((CSVEntryParser<A>) entryParser).strategy(new CSVStrategy(',', '"', '#', true, true)).build();
    List<A> m_NewExternalFileData = newExternalFileCSVReader.readAll();

使用这段代码,我可以读取特定于 A 类的 CSV 文件。
我还有其他几个类:B、C、D,它们都使用上面相同的代码,只是它们各自的类。

是否可以有一个函数,我将类名作为字符串传递,它可以根据字符串输入名称实例化 CSVReader/解析器?我不必创建 3 个不同的代码段(针对 B、C、D 类),我可以使用相同的代码段,只需输入相关的类名即可?

最佳答案

您可以使用工厂模式。

创建接口(interface)并在内部定义 A、B、C 和 D 的基本方法。

然后所有 A、B、C 和 D 类都必须实现该接口(interface)。

public interface BaseInterface {
    // your methods
}

然后创建一个工厂类,您在其中传递一个标识符,它将返回正确启动的阅读器

package a;

public final class Factory {

    // Not instantiable
    private Factory() {
        throw new AssertionError("Not instantiable");
    }

    public static CSVReader<your interface> getReader(String reader) {

        if ("A".equals(reader)) {
            return new CSVReader<A>();
        } else if ("B".equals(reader)) {
            return new CSVReader<B>();
        }
        // TODO create all your readers
    }
}

现在,您可以像这样通过您的工厂类调用阅读器:

ValueProcessorProvider provider = new ValueProcessorProvider();
    CSVEntryParser<A> entryParser = new AnnotationEntryParser<A>(A.class, provider);

    CSVReader<your interface> newExternalFileCSVReader = 
            Factory("your reader type");
    List<your interface> m_NewExternalFileData = newExternalFileCSVReader.readAll();

由于您没有发布 A、B、C 和 D 类,您必须自定义该代码,但按照这种方式,我认为您可以完成您想要的。

关于java - 使用字符串类名实例化通用变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33934952/

相关文章:

java - 第二个 Activity 不会填充

csv - 从 CouchDB 创建 CSV View

java - 获取返回泛型类型的类可能吗?

c# - 如何将数据强制转换为方法约束中指定的泛型?

java - Java 中 boolean 动词的变量和方法命名约定?

java - servlet 如何进行自身的热重新部署

python - 根据 csv 中的空格分隔值写入新行

java - 将通用列表转换为数组。为什么我需要使用克隆?

java - 小程序总是给出警告对话框

java - 在所有方法中插入打印语句