为什么以下代码会出现编译错误?
public MyObject(Builder<? extends MyObject> builder) {
// Type mismatch: cannot convert from MyObject.Builder<capture#5-of ? extends MyObject> to MyObject.Builder<MyObject>
Builder<MyObject> myObjBuilder = builder;
}
Run Code Online (Sandbox Code Playgroud)
如果Builder类型是MyObject的子类,那么为什么不能将构建器指定为仅键入MyObject?我需要这样做,因为我无法使用构建器的MyObject类型的对象.看一下这段代码,例如:
public MyObject(Builder<? extends MyObject> builder) {
// The method getData(capture#8-of ? extends MyObject) in the type Builder<capture#8-of ? extends MyObject> is not applicable for the arguments (MyObject)
this.data = builder.getData(this);
}
Run Code Online (Sandbox Code Playgroud)
我觉得应该允许这样做.或者我在这里遗漏了什么?有没有办法在不(Builder<MyObject>)使用构建器和必须使用@SuppressWarnings的情况下执行此操作?
还要注意我需要Builder,<? extends MyObject>因为MyObject及其Builder将被子类化(因为它是抽象的).
谢谢你的帮助!