gpt4 book ai didi

java - 如何在方法java之外使用它的构造函数实例化对象

转载 作者:行者123 更新时间:2023-12-01 22:12:44 25 4
gpt4 key购买 nike

我想在方法之外使用它的构造函数实例化一个对象。示例:

public class Toplevel {

Configuration config = new Configuration("testconfig.properties");

public void method1() {

config.getValue();
...etc
}
}

如果我现在这样做...我会收到此错误..

Default constructor cannot handle exception type IOException thrown by implicit super constructor. Must define an explicit constructor

我想做这样的事情,这样我就可以在类中的任何地方调用 config,现在我必须实例化配置对象...必须有一种方法可以做到这一点...任何帮助都是非常感谢,提前致谢。

编辑:

配置类:

public class Configuration {

private String mainSchemaFile;


public Configuration() {
}

public Configuration( String configPath ) throws IOException {

Properties prop = new Properties();
prop.load( new FileInputStream( configPath ));

this.mainSchemaFile= prop.getProperty("MAINSCHEMA_FILE");
}

最佳答案

您的Configuration构造函数被声明为抛出IOException。任何使用此构造函数实例化 Configuration 的代码都必须捕获它。如果您使用变量初始值设定项,则无法捕获它,因为您无法提供 catch block ;您不能在此处放置任何 block ,只能放置一个表达式。没有方法可以在两者上声明 throws 子句。

您的替代方案:

  • Toplevel 构造函数中实例化 Configuration。您可以在构造函数主体中捕获异常,也可以声明该构造函数抛出异常。

    public class Toplevel {
    Configuration config;
    public Toplevel() {
    try {
    config = new Configuration("testconfig.properties");
    } catch (IOException e) { // handle here }
    }
    // ...
  • TopLevel 类的实例初始值设定项中实例化 Configuration,您可以在其中捕获异常并进行处理。

    public class Toplevel {
    Configuration config;

    {
    try {
    config = new Configuration("testconfig.properties");
    } catch (IOException e) { // handle here }
    }
    // ...
  • Configuration 构造函数中捕获并处理异常,因此调用代码不必捕获异常。这不是首选方法,因为您可能实例化了无效的 Configuration 对象。调用代码仍然需要确定它是否有效。

    public class Configuration {
    // Your instance variables
    private boolean isValid;

    public Configuration( String configPath ) {
    try {
    // Your code that might throw an IOE
    isValid = true;
    } catch (IOException e) {
    isValid = false;
    }
    }

关于java - 如何在方法java之外使用它的构造函数实例化对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31571640/

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