我有一个CustomerRepository类:
public class CustomerRepository {
private static final String FILE_PATH = "src/poly/customer/data.txt";
public List<AbstractCustomer> customers;
{
try {
customers = readFiles();
} catch (IOException e) {
e.printStackTrace();
}
}
private final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy");
public List<AbstractCustomer> readFiles() throws IOException{
List<AbstractCustomer> result = new ArrayList<>();
List<String> lines = Files.readAllLines(Path.of(FILE_PATH));
for (String line : lines) {
String[] parts = line.split(";");
int points = Integer.parseInt(parts[3]);
LocalDate date = LocalDate.parse(parts[4], formatter);
if (parts[0].equals("REGULAR")) {
RegularCustomer customer = new RegularCustomer(parts[1], parts[2], points, date);
result.add(customer);
} else if (parts[0].equals("GOLD")) {
GoldCustomer customer = new GoldCustomer(parts[1], parts[2], points);
result.add(customer);
} else {
throw new IOException();
}
}
return result;
}
我想从文件中读取客户,然后将他们添加到客户列表中。我试着这样做:
{
try {
customers = readFiles();
} catch (IOException e) {
e.printStackTrace();
}
}
这给了我java。lang.NullPointerException:formatter,我该如何解决这个问题?这个方法应该从文本文件中创建对象,然后将它们添加到客户列表中。我的文本文件如下所示:
REGULAR; c1; Alice; 0; 2022-03-10
有规律的c2;上下快速移动0;2022-01-04
黄金;c3;卡罗尔;0;
问题是您的实例初始化器(带有tr/catch语句的块)在formatter
的字段初始化器之前执行,因此formatter
仍然为空。
我怎么能解决这个问题?
只需将formatter
的声明(包括初始化)移到实例初始值设定项上方即可。。。但我建议使用构造函数来初始化客户
,而不是使用实例初始值设定项块,从而使代码更易于理解。
我还建议将formatter
设置为一个静态字段-DateTimeFormatter
是不可变且线程安全的。不管怎样,您将其存储在最后一个字段中,那么为什么要为每个实例创建一个新字段呢?(这本身就可以解决问题,但出于可读性考虑,我仍然建议使用普通的构造函数声明。)
问题内容: 好的,这可能是一个非常愚蠢的问题,但是我发现关于此的PHP文档以及一些Internet搜索并没有使我对此有所任何了解。 什么时候应该使用try-catch块来改进我的应用程序? 我读过有人说我们应该仅使用try- catch块来防止致命错误。我读过别人的话说,我们应该只在意外错误上使用它(等什么?意外?如果它们是意外错误,如何使用try- catch防止它们出现?我应该将所有应用程序代
我让我的学长给我解释,他说, 这是为了防止生产中的崩溃。 我完全不同意。对我来说,这不是防止应用程序崩溃的方法。这表明开发人员不知道他/她在做什么,并有疑问。 由于这个问题得到了很多关注,有些人误解了这个问题(可能是因为我没有清楚地表达它),我打算重新表达它。 以下是开发人员在这里所做的 > 编写并测试一个函数,它可以是一个只是初始化视图的小函数,也可以是一个复杂的函数,测试后它被包裹在块中。即使
问题内容: 我有一个JavaScript函数,该函数创建具有3行2单元格的表。 谁能告诉我如何使用我的函数创建下表(我需要针对我的情况进行此操作)? 这是下面给出的我的javascript和html代码: 问题答案: 这应该起作用(对上面的代码进行一些改动)。
问题内容: 我们都使用多个插入查询。这样做时,应该将其放置在内部还是包裹起来?甚至有必要在交易出现问题时自动将交易失败的情况包括在内吗? 包装交易的样本: 相反,包装try … catch: 或只是一笔没有交易的交易…抓住 问题答案: 如果您需要通过代码手动“退出”交易(通过异常还是只是检查错误状态),则不应使用,而是将代码包装在and /中: 请参阅交易文档。
问题内容: 我需要在C#中创建一个SQL格式化程序。谁能指出我在网上的一些资源?我需要实现一个成熟的解析器,还是有一个更简单的方法来实现呢? 问题答案: 看一下 在C#中解析SQL代码 也看一下 SQL漂亮打印机