绕过构造函数调用构造函数中的第一个语句

341*_*008 0 java inheritance constructor

我是一个Java新手,因此这个简单的问题:

我有一个类,其构造函数接受一个参数,如下所示:

class MyBase {
    public MyBase(ObjectType1 o1) {}
    ...
}
Run Code Online (Sandbox Code Playgroud)

我想从这个类派生一个类,它的构造函数接受一个字符串并使用在此参数的基础上选择的适当参数调用基类的构造函数,如下所示:

class MyDerived extends MyBase {
     public MyDerived(String objectType) {
          ObjectType o = null;
          if (objectType.equals("type1")
              o = A; /* some value */
          else
              o = B; /* some other value */

           super(o);
     }
Run Code Online (Sandbox Code Playgroud)

这段代码的问题显然是构造函数调用必须是构造函数中的第一个语句.那么我该如何解决这个问题呢?我不想做出关于ObjectType外面的决定MyDerived.我也希望避免提供静态CreateObject方法MyDerived.

Oli*_*rth 5

在类中定义一个静态帮助器方法,然后调用它.例如:

class MyDerived extends MyBase {
     public MyDerived(String objectType) {
           super(myHelper(objectType));
     }

     private static ObjectType myHelper(String objectType) {
         ...
     }
Run Code Online (Sandbox Code Playgroud)