我的课如下:
public class StreamEventSuccess<T> {
private final T event;
public StreamEventSuccess(final T event) {
this.event = event;
}
public T getEvent() {
return event;
}
}
我试着激励它:
StreamEventSuccess<BusinessEvent> success = new StreamEventSuccess<BusinessEvent>(event);
我得到:
java.lang.NoSuchMethodError: com.ryan.protocol.StreamEventSuccess.<init>(Lcom/ryan/domain/event/BusinessEvent;)V
知道为什么吗?
event
参数的类型为BusinessEvent
最佳答案
您描述的问题将在以下情况下发生:your-library-version-1
有一个构造函数StreamEventSuccess(BusinessEvent event)
您有一个用project-x
编译的项目(或类)your-library-version-1
。your-library-version-2
已设为通用StreamEventSuccess(T event)
。
您正在使用project-x
运行your-library-version-2
。
如果是这种情况,只需重新编译调用新构造函数的类即可。
发生这种情况是因为该构造函数的通用类型的实际类型为<init>(Ljava/lang/Object;)V
,所以您必须在生成该类后重新编译依赖项,因为它们的字节码指向构造函数<init>(Lcom/ryan/domain/event/BusinessEvent;)V
的旧(非通用)版本。