我的课如下:

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的旧(非通用)版本。

10-06 10:16