为了账号安全,请及时绑定邮箱和手机立即绑定

groovy类中如何调用接口的默认方法

groovy类中如何调用接口的默认方法

侃侃无极 2021-12-01 16:24:35
我有一个 groovy 类 Page,它实现了一个名为 IImageOperations 的接口。该接口包含一个默认方法 addImage。我想从 Page 类调用它。我试图以下面的方式打电话class Page implements IImageOperations, ITextOperations {void addImage(PDImageXObject image, float x, float y, float w = 0, float h = 0, float rotate = 0, boolean inline){    if(w == 0)        w = image.getWidth();    if(h == 0)        h = image.getHeight();    IImageOperations.super.addImage("", 0, 0);}}但是,它给了我以下错误Groovy:'Class.this' 和 'Class.super' 的使用只允许在嵌套/内部类中使用。如果我们将这个 Page 类定义为 Java Class,那么一切正常。
查看完整描述

1 回答

?
慕村225694

TA贡献1880条经验 获得超4个赞

以下正确的java代码


import java.lang.reflect.Type;



public class A implements Type{

    public static void main(String [] arg){

        new A().run();

    }


    public void run(){

        System.out.println( Type.super.getTypeName() );

    }


}

在 groovy 下编译失败:


org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:

A.groovy: 10: The usage of 'Class.this' and 'Class.super' is only allowed in nested/inner classes.

 @ line 10, column 23.

                System.out.println( Type.super.getTypeName() );

但是以下语法工作正常(groovy 2.4.11):


import java.lang.reflect.Type;


public class A implements Type{

    public static void main(String [] arg){

        new A().run();

    }


    public void run(){

        //System.out.println( Type.super.getTypeName() );

        System.out.println( ((Type)this).getTypeName() );

    }


}


查看完整回答
反对 回复 2021-12-01
  • 1 回答
  • 0 关注
  • 179 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信