在Groovy类中实现Java接口

在Groovy类中实现Java接口,java,groovy,Java,Groovy,我刚刚开始用Groovy编程。 我注意到一个奇怪的行为,无法找到任何解释 我已经创建了一个Java接口TestInterface.Java public interface TestInterface { public void m1(); } public class TestJ implements TestInterface{ @Override public void m1() { throw new UnsupportedOperatio

我刚刚开始用Groovy编程。 我注意到一个奇怪的行为,无法找到任何解释

我已经创建了一个Java接口TestInterface.Java

public interface TestInterface {

    public void m1();

}
public class TestJ implements TestInterface{

    @Override
    public void m1() {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    } 
}
我创建了一个Groovy类TestG.Groovy

class TestG implements TestInterface {

}
我创建了一个Java类TestJ.Java

public interface TestInterface {

    public void m1();

}
public class TestJ implements TestInterface{

    @Override
    public void m1() {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    } 
}
我的问题是在TestG中,为什么我在实现抽象方法或将类声明为抽象时没有得到任何错误


java和groovy有什么不同之处,因为我需要在java中实现抽象方法或将类声明为抽象类,而不是在groovy中。

我知道这个问题已经解决了一段时间,上面已经给出了答案,但我觉得有必要添加这个问题

class TestG implements TestInterface {}
这仍然是“java”的做事方式。使用groovy基本上消除了实现接口的需要(除了作为标记接口)

在groovy中,您只需执行以下操作:

def myObject = [m1: {-> doSomething()}] as TestInterface

在非抽象类中不能有抽象方法。类“TestG”必须声明为抽象,或者必须实现方法“void m1()”。
这是我在运行代码时遇到的错误。java在这方面没有区别。您使用的编辑器是什么?另外,当您尝试编译时,您会看到什么?我假设它会在编译时抛出一个异常,正如@cfrick发现的那样。我在Ubuntu上使用Netbeans。我得到了一个编译时错误。但是没有字形错误,即代码旁边的红色标记。我可以说,由于过度使用intellij,对于官方支持的每种语言(in)(可能除了java)它向我显示假阳性,隐藏真正的错误。我打赌所有其他IDE都是一样的。如果您认为这是netbeans(或groovy插件)的一个问题,那么您应该联系维护人员,提交一个bug,等等,以解决一些问题。Groovy有自己的编译器,JVM禁止使用抽象方法的非抽象类,因此Groovy编译器必须抱怨,否则JVM不会让它通过验证。groovy eclipse编译器是groovy编译器和JDT的混合体。但是JDT对任何非Java的东西都不太开放,开发人员也不太想为其他语言操心。这意味着集成是困难的,但是如果没有集成,您将无法获得例如重构。