Class 条件类导入/加载

Class 条件类导入/加载,class,groovy,import,Class,Groovy,Import,在Groovy脚本中,是否可以执行条件导入语句 if (test){ import this.package.class } else { import that.package.class } 其背景是希望在MacOS 10.5上使用某些东西,因为MacOS 10.5只有JDK1.5,所以一个特定的类不可用,但我发现有人已经为它编写了一个后端端口。不,不支持条件导入。。。我所能想到的最好的atm方法就是使用反射,就像你们在java中所需要的那个样 这里还可以使用ast转换来标

在Groovy脚本中,是否可以执行条件导入语句

if (test){
    import this.package.class
} else {
    import that.package.class
}

其背景是希望在MacOS 10.5上使用某些东西,因为MacOS 10.5只有JDK1.5,所以一个特定的类不可用,但我发现有人已经为它编写了一个后端端口。

不,不支持条件导入。。。我所能想到的最好的atm方法就是使用反射,就像你们在java中所需要的那个样


这里还可以使用ast转换来标记类,并用所需的反射代码包装使用缺少的类的代码。我想类装入器可以做到这一点,但会很复杂

您是否考虑过使用影子类和jsut部署不同的JAR

差不多

//jdk 1.5
somethingelse extends this {
}

=>将两者编译为两个不同的jar文件,部署在一个系统上,而不是另一个系统上

不完美,但可以工作


…等等:如果您的库只是在包名称上有所不同,那么您不需要影子类。您不能在同一个包中移动一个或另一个吗?

无法有条件地导入一个类,但您可以通过尝试加载该类,然后加载另一个未找到的类来实现类似的效果

这里只是一个例子:

def someClass
try {
    someClass = "org.apache.webdavlib.WebdavFile" as Class
} catch (Exception ex) {
    someClass = "java.io.File" as Class
}

def someInstance = someClass.newInstance("~/project/temp.log")

assert "java.io.File" == someInstance.getClass().getName()
Jochen“blackdrag”Theodorou不久前在groovy用户列表中提出了以下建议:

wsh = this.class.classLoader.loadClass("org.codehaus.groovy.scriptom.ActiveXObject").newInstance("WScript.Shell") 
那么就不需要使用import语句了


下面是邮件列表上的

John—使它工作得很好,在将类编译到现有的jar中时遇到了一些困难,我不需要在实现中使用语音标记,但现在它实现起来非常理想。谢谢
wsh = this.class.classLoader.loadClass("org.codehaus.groovy.scriptom.ActiveXObject").newInstance("WScript.Shell")