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

标签 java oop constructor language-concepts

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

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/

相关文章:

c++ - C++中的对象创建和成员声明

具有构造函数的类的 C++ vector

python - Pygame:根据构造函数参数绘制椭圆或矩形

java - 如何在不安装Stanford版本的eclipse并使用JRE7的情况下在eclipse中使用karel.jar?

java - 尽管有 mkdirs() 和 createNewFile(),FileOutputStream 上的 FileNotFoundException

java - Bigdecimal 转字符串

c++ - 类构造函数不保存变量

java : Function objects as strategies

javascript - 没有 new 的 JS Power Constructor 和 instanceof

JAVA服务提供者SAML2请求-禁用数字签名