我有一个应该返回扩展BaseDto类的对象列表的类。
所以我写了这个
const InputField = props => (
<div className="input-row">
<input
{...props.input}
type={props.type}
className="form-control input-box__input"
placeholder={props.placeholder}
value={props.value}
defaultValue={props.defaultValue}
defaultChecked={props.defaultChecked}
disabled={props.disabled}
onChange={props.onChange}
onKeyDown={this.onKeyDown}
checked={props.checked}
/>
{props.meta.touched && props.meta.error &&
<span className="error">
{props.intl.formatMessage({ id: props.meta.error }) }
</span>}
</div>
);
const onKeyDown = (e) => {
// Add logic here
}
}
这是应该在列表中返回的对象
public class Worker<T extends BaseDto> {
private T t;
ArrayList<T> getList() {
....
}
}
但是当我写的时候:
public class MyDTO extends BaseDto implements Serializable {
...
}
它不会编译并显示以下错误:
边界不匹配:MyDTO类型不能有效替代Worker类型的有界参数
怎么了?
答案 0 :(得分:0)
Worker<MyDTO> q = new Worker<MyDTO>(); // this is fine
您提供的代码应该可以运行,我在这里尝试过并且可以正常编译。
但是,此行无法在Java中编译:
Worker<BaseDto> dto = q; // this is not
因为Java中的通用类型是不变,这意味着即使X或Y是彼此的子类型,两种类型List<X>
和List<Y>
是不兼容的。在支持协方差的语言中,由于MyDTO是BaseDto的子类型,因此可以编译此行。