如何调用Groovy重写的名为getProperties()的可变Java方法

如何调用Groovy重写的名为getProperties()的可变Java方法,groovy,Groovy,我有一个带有.getProperties()方法的Java类,但是在Groovy中调用该方法时,它会从我定义的Java类中的方法而不是getProperties返回属性的LinkedHashMap 如何调用getProperties()方法而不是Groovy方法 我的Java代码(简化): 使用以下命令运行: javac MyObject.java && groovy Run.groovy && echo && java MyObject 我得到

我有一个带有
.getProperties()
方法的Java类,但是在Groovy中调用该方法时,它会从我定义的Java类中的方法而不是getProperties返回属性的
LinkedHashMap

如何调用
getProperties()
方法而不是Groovy方法

我的Java代码(简化):

使用以下命令运行:

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):


但是我最初在1.8.5上看到了这个问题,我想是的。

我没有看到同样的行为。使用Groovy 1.8.5,如果我将其编译为Java:

import java.util.*; 

public class MyClass {
    private Collection<String> myProperties;

    public MyClass() {
         this.myProperties = new ArrayList<String>();
    }

    public MyClass(Collection<String> myProperties) {
         this.myProperties = myProperties;
    }

    public Collection<String> getProperties() {
         System.err.println("java getProperties");
         return this.myProperties;
    }
}

这可能不再相关,但只需做一个小改动,您就可以做到这一点:

obj.getProperties([] as MyObject.PropertyFilter[])

更改是PropertyFilter接口不能是私有的。

抱歉,我没有测试我的测试用例。这个问题实际上是由一个变量方法引起的。请参阅我更新的示例。
$ groovy -version
Groovy Version: 2.0.1 JVM: 1.6.0_27 Vendor: Sun Microsystems Inc. OS: Linux
import java.util.*; 

public class MyClass {
    private Collection<String> myProperties;

    public MyClass() {
         this.myProperties = new ArrayList<String>();
    }

    public MyClass(Collection<String> myProperties) {
         this.myProperties = myProperties;
    }

    public Collection<String> getProperties() {
         System.err.println("java getProperties");
         return this.myProperties;
    }
}
bash-3.2$ javac MyClass.java 
bash-3.2$ groovy Test.groovy 
java getProperties
[]
bash-3.2$ 
obj.getProperties([] as MyObject.PropertyFilter[])