我有一个扩展方法:
static <T> T firstOrNull(List<T> self) {
return (self == null || self.isEmpty()) ? null : (T) self.first()
}
它会编译和编译。但是,当我调用它时:
List<String> list = ["abc"]
assert list.firstOrNull() == "abc"
self
始终为空。
我可以直接调用static方法:
CollectionIdioms.firstOrNull(["abc"])
返回正确的结果。META-INF/services/org.codehaus.groovy.runtime.ExtensionModule
如下:
moduleName=Groovy Extensions
moduleVersion=1.0
extensionClasses=
staticExtensionClasses=util.CollectionIdioms
1条答案
按热度按时间nxagd54h1#
如果您将描述符更改为如下所示,它将起作用:
您已经初始化了用于静态扩展方法的
staticExtensionClasses
。您正在添加示例扩展方法。您的方法在CollectionIdioms
类中的定义正确地是静态的,但要添加的扩展方法实际上是示例方法。请参阅github.com/jeffbrown/listextension上的项目。
app/src/main/groovy/util/CollectionIdioms.groovy
app/src/main/resources/META-INF/services/org.codehaus.groovy.runtime.ExtensionModule
app/src/main/groovy/listextension/App.groovy
这是可行的: