无需编译即可动态加载groovy类/脚本?

时间:2012-12-10 12:17:06

标签: groovy classloader

我在包层次结构中有一组groovy脚本。我有一个主要脚本,我想从中调用其他脚本。例如,我有这些脚本(其中包含同名的公共类/接口):

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");
  }
}

1 个答案:

答案 0 :(得分:1)

呀! Groovy是一种动态语言。你可以create class instance dynamically

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'