Правильное использование аннотаций Java для генерации классов на основе импортированных внешних классов библиотеки - PullRequest
0 голосов
/ 16 июня 2019

Учитывая некоторые импортированные классы, на которые я не могу повлиять,

import com.foo.A;
import com.foo.B;
import com.foo.C;

Я хочу создать интерфейс методов, общих для A, B и C, например

public interface Common {
    Uuid getId();
    Long getVersion();
    DateTime getCreated();
    DateTime getModified();
}

, а также генерировать прокси-классы, реализующие этот интерфейс;

public class A extends com.foo.A implements Common {}
public class B extends com.foo.B implements Common {}
public class C extends com.foo.C implements Common {}

Кажется, что я должен использовать аннотации Java и JavaPoet для достижения этой цели, но я не знаю, чтоаннотированная цель должна быть.То есть я хочу написать что-то вроде

@GenerateRelatedProxies("Common", com.foo.A, com.foo.B, com.foo.C)

, но какой элемент должен аннотировать эта аннотация?Должен ли я вообще использовать аннотации или как бы вы подходили к такого рода генерации кода?


Если классы связаны, то почему библиотека не предоставляет интерфейс для начала?

Причина в том, что библиотека создана из proto3.Я понимаю, что protobuf не поддерживает наследование, потому что он хочет быть независимым от языка, а некоторые языки не поддерживают наследование ( например Rust).Тем не менее, концептуально классы, с которыми я работаю, практически так же связаны, как и Cat, Dog и Bird, и становится все более и более раздражающим копировать-вставлять одинаковую логику везде в Java из-за зависимости от классов, сгенерированных с помощью protobuf.Я думаю, что это правильно для меня организовать код реализации так, как я хочу, при условии, что я утверждаю, что Cat, Dog и Bird на самом деле связаны.

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