我有以下无法编译并生成Error:() java: type argument GroupOfPartsDecorImpl<V> is not within bounds of type-variable GOP
的示例。代码如下:
class MainContainerGroupPartDecorator<V, GOP extends GroupOfParts<V, PartDecorator<V, ? extends Part<V>>>>
extends BaseContainerGroupPartDecorator<V, GOP> {
public static <V> MainContainerGroupPartDecorator<V, GroupOfPartsDecorImpl<V>> getInstance() {
return null;
}
}
class BaseContainerGroupPartDecorator<V, GOP extends GroupOfParts<V, ?>> {
void something() {}
}
class GroupOfPartsDecorImpl<V> implements GroupOfParts<V, PartDecorator<V, PartImpl1<V>>> {
@Override
public Collection<PartDecorator<V, PartImpl1<V>>> getParts() {
return null;
}
}
interface GroupOfParts<V, P extends Part<V>> {
Collection<P> getParts();
}
class PartDecorator<V, P extends Part<V>> implements Part<V> {
@Override
public V getId() {
return null;
}
}
class PartImpl1<V> implements Part<V> {
@Override
public V getId() {
return null;
}
}
由于GOP是GOP extends GroupOfParts<V, PartDecorator<V, ? extends Part<V>>>
而GroupOfPartsDecorImpl应该在最后GroupOfParts<V, PartDecorator<V, Part<V>>
,为什么会出现此错误?
答案 0 :(得分:2)
class MainContainerGroupPartDecorator<V, P extends Part<V>, GOP extends GroupOfParts<V, PartDecorator<V, P>>>
extends BaseContainerGroupPartDecorator<V, GOP>
{
public static <V> MainContainerGroupPartDecorator<V,PartImpl1<V>, GroupOfPartsDecorImpl<V>> getInstance() {
return null;
}
}
的第二个通用参数必须为GroupOfParts
。并且由于泛型默认不变,因此不会有偏差。但PartDecorator<V, ? extends Part<V>>
使用GroupOfPartsDecorImpl
,这是不一样的,所以它不会编译。
您可以通过在PartDecorator<V, PartImpl1<V>>
:
MainContainerGroupPartDecorator
(基本上将class MainContainerGroupPartDecorator<V, GOP extends GroupOfParts<V,
? extends PartDecorator<V, ? extends Part<V>>>>
extends BaseContainerGroupPartDecorator<V, GOP> {
更改为PartDecorator<V, ? extends Part<V>>
)
答案 1 :(得分:1)
问题是你的第二个通用function check(callback) {
var dfrd1 = $.Deferred();
console.log('checks start!');
$('#User_Email').mailgun_validator({
api_key: 'x',
in_progress: validation_in_progress, // called when request is made to validator
success: validation_success, // called when validator has returned
error: validation_error, // called when an error reaching the validator has occured
}).pipe(function(res){
dfrd1.resolve(res);
})
console.log('checks complete! ErrorEmail='+ErrorEmail);
return dfrd1;
}
的第3级中的有界通配符。您可以通过其他通用? extends Part<V>
P