gpt4 book ai didi

java - 在 Java 中链接构造函数而不从默认构造函数抛出异常

转载 作者:行者123 更新时间:2023-11-30 05:00:00 26 4
gpt4 key购买 nike

我读过这篇文章:Can I use throws in constructor?——这给了我正确的想法,并引导我找到一个答案,但不是很明确。我还阅读了其他几篇文章,但找不到我的答案。回顾一下我所学到的上下文,本质上,这不会编译......

public ExampleClass(String FileName)
{
this(new FileInputStream(FileName));
}

public ExampleClass(FileInputStream FileStream)
{
DoSomethingToSetupBasedUponFileStream(FileStream);
}

...因为 FileInputStream 构造函数(从字符串构造函数调用)可能会抛出 FileNotFoundException。您仍然可以通过使其抛出相同的异常来创建构造函数,如下所示:

public ExampleClass(String FileName) throws FileNotFoundException
{
this(new FileInputStream(FileName));
}

我的问题与默认构造函数(无参数)有关,它只使用默认文件名字符串常量:

public ExampleClass() throws FileNotFoundException
{
this(DEFAULT_FILE_NAME);
}

这会将构造函数链接为:

ExampleClass() --> ExampleClass(<String>) --> ExampleClass(<InputFileStream>)

在这种情况下,是否可以在默认构造函数中使用默认值(静态最终类成员)来实例化(进一步沿着链)FileInputStream,但不必使用 throws FileNotFoundException 代码(这将需要使用该类的人重新抛出或处理异常?

如果我可以执行以下操作,我会自己处理异常:

public ExampleClass()
{
try
{
this(DEFAULT_FILE_NAME);
}
catch (Exception e)
{
DoSomethingToHandleException(e);
}
}

...但是,据我所知这是不可能的,因为“构造函数调用必须是构造函数中的第一个语句”

此时更习惯 .Net,如果我真的不想的话,我从来没有被迫处理异常...:D

最佳答案

从构造函数中重构文件构造代码,这样您就可以执行类似的操作 --

public ExampleClass() {
try {
fileInputStreamMethod(DEFAULT_FILE);
}
catch(Exception e) {
...
}

public ExampleClass(String fileName) throws Exception {
fileInputStreamMethod(fileName);
}

private void fileInputStreamMethod(String fileName) throws Exception {
// your file handling methods
}

关于java - 在 Java 中链接构造函数而不从默认构造函数抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7125824/

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