【发布时间】:2015-09-23 13:51:19
【问题描述】:
我从 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 创建一个子类。即使这不可能,我也欢迎提供替代方法或近似此行为的建议。
【问题讨论】:
标签: java bytecode byte-buddy