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

时间:2015-07-22 18:53:15

标签: java oop constructor language-concepts

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

<dom-module id="test-element">
  <template>
    <div>Hello <span>{{name}}</span></div>
  </template>
  <script>
    Polymer({
      is: "test-element",

      properties: {
        name: String
      }
    });
  </script>
</dom-module>

<dom-module id="test-element2">
  <template>
    <input value="{{name::input}}"/>
    <test-element name="[[name]]"></test-element>
  </template>
  <script>
    Polymer({
      is: "test-element2",

      properties: {
        name: String
      }
    });
  </script>
</dom-module>

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

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

2 个答案:

答案 0 :(得分:2)

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

您的替代方案:

  • Configuration构造函数中实例化Toplevel。您可以catch构造函数体中的异常,或者您可以声明构造函数throws异常。

    public class Toplevel {
        Configuration config;
        public Toplevel() {
            try {
                config = new Configuration("testconfig.properties");
            } catch (IOException e) {  // handle here }
        }
        // ...
    
  • Configuration类的实例初始化程序中实例化TopLevel,您可以在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;
             }
         }
    

答案 1 :(得分:1)

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

所以你不处理Configuration构造函数的IoException! 更好的方法是声明Toplevel的特定构造函数,如下所示:

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