我有一个带有.getProperties()
方法的 Java 类,但是在 Groovy 中调用该方法时,它会从Groovy Beans 魔术LinkedHashMap
返回一个属性,而不是我的 Java 类定义的 getProperties 方法。
如何调用我的getProperties()
方法而不是 Groovy 方法?
我的 Java 代码(简化):
import java.util.*;
public class MyObject {
private Collection<Property> properties;
private static class Property {
public String value;
public Property(String value) {
this.value = value;
}
public String toString() {
return String.format("Property: %s", this.value);
}
}
private static interface PropertyFilter {
boolean passes(String value);
}
public static class StartsWithPropertyFilter implements PropertyFilter {
public String prefix;
public StartsWithPropertyFilter(String prefix) {
this.prefix = prefix;
}
public boolean passes(String value) {
if(value == null)
return false;
return value.startsWith(prefix);
}
}
public MyObject() {
this(new ArrayList<Property>());
}
public MyObject(Collection<Property> myProperties) {
this.properties = myProperties;
}
public void addProperty(String value) {
this.properties.add(new Property(value));
}
public Collection<Property> getProperties(PropertyFilter... filters) {
Collection<Property> ret = new ArrayList<Property>();
for(Property prop : properties) {
boolean passes = true;
for(PropertyFilter filter : filters) {
if(!filter.passes(prop.value)) {
passes = false;
break;
}
}
if(passes) {
ret.add(prop);
}
}
System.out.println("Java getProperties()");
return ret;
}
public static void main(String[] args) {
MyObject obj = new MyObject();
obj.addProperty("Fast");
obj.addProperty("Strong");
obj.addProperty("Furious");
System.out.println(obj.getProperties());
System.out.println(obj.getProperties(new MyObject.StartsWithPropertyFilter("F")));
}
}
我的 Groovy 代码:
MyObject obj = new MyObject()
obj.addProperty("Fast")
obj.addProperty("Strong")
obj.addProperty("Furious")
println obj.getProperties()
println obj.getProperties(new MyObject.StartsWithPropertyFilter("F"))
运行这个:
javac MyObject.java && groovy Run.groovy && echo && java MyObject
我得到这个输出:
[class:class MyObject]
Java getProperties()
[Property: Fast, Property: Furious]
Java getProperties()
[Property: Fast, Property: Strong, Property: Furious]
Java getProperties()
[Property: Fast, Property: Furious]
我的 Groovy 版本是最近的版本(2.0.1):
$ groovy -version
Groovy Version: 2.0.1 JVM: 1.6.0_27 Vendor: Sun Microsystems Inc. OS: Linux
但我最初在 1.8.5 上看到了这个问题,我相信是的。