Я начинаю с byte-buddy очень впечатляющей библиотекой манипулирования байтовым кодом. Он отлично работает, но у меня есть проблема с подклассов абстрактную, параметризованный класс:Подкласс абстрактный параметризованный класс с byte-buddy
public interface Task<DTO extends IDatabaseObject> {
void execute(DTO input);
Class<DTO> getDataObjectClass();
}
При этом, как абстрактный класс:
public abstract class AbstractTask<T extends IDatabaseObject> implements Task<T> {
protected Class<T> dataObjectClass = /* Call to an external method which retrieves the class from T */;
@Override
public Class<T> getDataObjectClass() {
return dataObjectClass;
}
}
Я хочу создать конкретный класс, расширяющий
public abstract class AbstractTask<T extends IDatabaseObject> implements Task<T> {
protected String SUCCESS_MESSAGE_PREFIX = "task.mess.";
protected Class<T> dataObjectClass;// = Introspector.getParameterizedTypeClass(this, AbstractTask.class, 0);
@Override
public Class<T> getDataObjectClass() {
return dataObjectClass;
}
@Override
public String getSuccessMessage(IDatabaseObject t) {
final String messageKey = SUCCESS_MESSAGE_PREFIX + this.getClass().getSimpleName();
final MessagesFactory messagesFactory = MessagesFactory.getInstance();
return messagesFactory.isPresent(messageKey) ? messagesFactory.get(messageKey) : "";
}
}
Я хочу создать конкретный класс AbstractTask
, чтобы заполнить следующее утверждение:
createConcreteImplementation(Person.class).getDataObjectClass() == Person.class
, где метод createConcreteImplementation
создает подкласс через Byte Buddy. Даже если это невозможно, я приветствую предложения по альтернативным путям или приближенно к этому поведению.