Учитывая некоторые импортированные классы, на которые я не могу повлиять,
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 на самом деле связаны.