0

パッケージ階層にグルーヴィーなスクリプトのセットがあります。1 つのメイン スクリプトがあり、そこから他のスクリプトを呼び出します。たとえば、次のスクリプトがあります (同じ名前のパブリック クラス/インターフェイスを含む):

package.MainScript
package.MyInterface;

package.utils.MyInterfaceImpl1 //implements MyInterface
package.utils.MyInterfaceImpl2 //implements MyInterface

コンパイル時に呼び出されたクラス名を知らずに、あるスクリプトを別のスクリプトから呼び出す方法はありますか? 私は次のような動的クラスローディングのようなことをするつもりです:

class MainScript {
  public static void main (String[] args) {
      MyInterface instance = Class.forName("package.utils.Util1");
  }
}
4

1 に答える 1

1

うん!Groovy は動的言語です。クラスインスタンスを動的に作成できます。

package.MyInterface
class MyInterfaceImpl1 {
    def greet() {
        "Hello"
    }    
}

package.MyInterface
class MyInterfaceImpl2 {
    def greet() {
        "Hi!"
    }   
}

def name = 'MyInterfaceImpl1' // Choose whatever you want at runtime
def className = Class.forName("MyInterface.$name")
def instance = className.newInstance()
assert instance.greet() == 'Hello'
于 2012-12-10T13:18:32.740 に答える