我有一个课程如下:
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
答案 0 :(得分:1)
如果出现以下情况,您所描述的问题就会发生:
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
,因此在生成该类之后必须重新编译依赖项,因为它们的字节码指向构造函数的旧(非泛型)版本{ {1}}