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



我想实例化一个对象与它的构造函数之外的方法。例子:

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

我想做这样的事情,所以我可以调用配置在我的类的任何地方,现在我一直必须实例化配置对象…一定有办法的……任何帮助都将不胜感激,提前感谢。

编辑:

配置类:

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块;这里不能放块,只能放表达式。没有方法可以声明throws子句

你的选择:

  • Toplevel构造函数中实例化Configuration。可以在构造函数体中catch异常,也可以声明该构造函数throws异常。

    public class Toplevel {
        Configuration config;
        public Toplevel() {
            try {
                config = new Configuration("testconfig.properties");
            } catch (IOException e) {  // handle here }
        }
        // ...
    
  • TopLevel类的实例初始化器中实例化Configuration,在那里你可以catch异常并处理它。

    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;
             }
         }
    

当你创建一个新的Toplevel对象时,你没有为它声明一个特定的构造函数,Toplevel的属性被实例化,正如你的代码用Configuration config = new Configuration("testconfig.properties");描述的那样

所以你不处理配置构造函数的IoException !一个更好的方法是像这样声明一个特定的顶层构造函数:

public Toplevel(){
    try{
        this.config = new Configuration("testconfig.properties");
    } catch (IOException e) {
        // handle Exception
    }
}

相关内容

  • 没有找到相关文章

最新更新