gpt4 book ai didi

java - Bean 类放入列表中 - Java 泛型 - 找不到符号

转载 作者:行者123 更新时间:2023-12-02 06:06:13 27 4
gpt4 key购买 nike

我正在使用 java 泛型来读取 CSV 文件并创建相应的对象。我将其设置为通用,可以接受任何 CSV 文件并将其映射到一个类。

我的 CSV 中的第一行作为类名,然后我将读取其余行并为每行构建一个对象。

我正在使用CSVReader帮助我做这件事。但我收到编译错误(我在代码中标记了它们)。

这是我的方法:

public String importFromCsvFile(File f) throws IOException, ClassNotFoundException
{
FileReader fr = new FileReader(f);
BufferedReader reader = new BufferedReader(fr);
String className = reader.readLine();

//Java reflection to get the Class Object.
Class BeanClass = Class.forName(className);

// Reader reader = new FileReader("persons.csv");
ValueProcessorProvider provider = new ValueProcessorProvider();
CSVEntryParser<BeanClass> entryParser = new AnnotationEntryParser<BeanClass>(BeanClass.class, provider); // BeanClass, cannot find symbol
CSVReader<BeanClass> csvPersonReader = new CSVReaderBuilder<BeanClass>(reader).entryParser(entryParser).build(); // BeanClass, cannot find symbol

List<BeanClass> beanClassList = csvPersonReader.readAll(); // BeanClass, cannot find symbol

System.out.println("First line: " + className);

return "";
}

我仍在构建我的方法,但由于这个编译错误,我无法继续。有谁知道如何修复它们?同样,BeanClass 可以是我拥有的任何数据类,因此它必须是通用的。

谢谢!

最佳答案

您混淆了编译时已知的静态类名(如 StringValueProcessorProvider )与引用类的变量,仅在运行时已知。如果您遵循 Java 命名约定,那么区分这两者会更容易:类名以大写字母开头,变量以小写字母开头。所以代码应该是

FileReader fr = new FileReader(f);
BufferedReader reader = new BufferedReader(fr);
String className = reader.readLine();

//Java reflection to get the Class Object.
Class beanClass = Class.forName(className);

ValueProcessorProvider provider = new ValueProcessorProvider();
CSVEntryParser<beanClass> entryParser = new AnnotationEntryParser<beanClass>(beanClass.class, provider); // BeanClass, cannot find symbol
CSVReader<beanClass> csvPersonReader = new CSVReaderBuilder<beanClass>(reader).entryParser(entryParser).build(); // beanClass, cannot find symbol

List<beanClass> beanClassList = csvPersonReader.readAll(); // BeanClass, cannot find symbol

System.out.println("First line: " + className);

return "";

现在您可以立即看到您正在使用变量 beanClass ,在只能使用编译时已知的文字类名的地方: <> 之间必须有什么是一个字面类名,而不是变量,因为编译器使用它来确保类型安全。我还没有检查以下代码是否可以编译,但它应该比您的尝试更接近:

FileReader fr = new FileReader(f);
BufferedReader reader = new BufferedReader(fr);
String className = reader.readLine();

//Java reflection to get the Class Object.
Class<?> beanClass = Class.forName(className);

ValueProcessorProvider provider = new ValueProcessorProvider();
CSVEntryParser<?> entryParser = new AnnotationEntryParser<>(beanClass, provider);
CSVReader<?> csvPersonReader = new CSVReaderBuilder<>(reader).entryParser(entryParser).build();

List<?> beanClassList = csvPersonReader.readAll();

System.out.println("First line: " + className);

return "";

关于java - Bean 类放入列表中 - Java 泛型 - 找不到符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22273034/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com