Как вызвать метод интерфейса по умолчанию в Groovy Class - PullRequest
0 голосов
/ 22 октября 2018

У меня есть класс страницы groovy, который реализует интерфейс с именем IImageOperations.

Этот интерфейс содержит метод addImage по умолчанию.Который я хотел вызвать из класса Пейдж.

Я пытался позвонить нижеприведенным способом

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 Ответ

0 голосов
/ 22 октября 2018

следующий правильный код 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() );
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...