我想在方法之外使用它的构造函数实例化一个对象。示例:
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/