2016-10-05 1 views
3

У меня есть интерфейс A:GWT Классы генератор наследственного интерфейса

public interface A{ 
    String someMethod(); 
} 

И используя GWT.create (класс A.class) я получаю мгновенный реализации этого интерфейса.

Однако, если я создаю интерфейс B();

public interface B extends A{ 
    String someOtherMethod(); 
} 

И делать GWT.create (B.class) я получить реализацию интерфейса B, но без реализаций методов интерфейса.

И получаю ошибку компиляции:

[Ошибка] Строка 3: Тип B_impl должен реализовать абстрактный метод A.someMethod()

Дополнительно: Как я узнать позже, может быть это связано с Аннотации.

Так у меня есть:

public interface annotationHelperClass{ 
} 

, что имеет:

public final class annotationHelperClassGenerator{ 
//Some code 
} 

аннотация:

@Retention(RetentionPolicy.RUNTIME) 
@Target(ElementType.METHOD) 
public @interface MyAnnotation { 
    String someParam(); 
} 

так интерфейс А будет:

public interface A extends annotationHelperClass{ 
     @MyAnnotation(someParam = "Some string") 
     String someMethod(); 
    } 

интерфейс B:

public interface B extends A{ 
     @MyAnnotation(someParam = "Some another string") 
     String someOtherMethod(); 
    } 
+0

GWT.create (B.class) позволяет создать интерфейс ??? –

+0

Нет, это позволяет мне создать мгновение этого интерфейса, но только с помощью методов, объявленных в интерфейсе B. –

+0

Может быть, в Annotations я использую аннотации в интерфейсе A, которые помогают мне генерировать классы, но аннотации не наследуются к интерфейсу B, поэтому GWT не может правильно сгенерировать эти методы! –

ответ

0

Проблема заключалась в том, что мое использование генератора:

for (JMethod method : targetClass.getMethods()) { 
    MyAnnotation descriptor = method.getAnnotation(MyAnnotation.class); 
     JParameter[] parameters = method.getParameters(); 
     //some code 
} 

Так изменение GetMethods() на getInheritableMethods() решить эту проблему.

Извините за то, что вы не подробно, я не был уверен, что важно в этом случае!