作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
public class XYZ {
public static void main(String[] args) {
C<A> c = new D<A>();
我收到错误:::绑定(bind)不匹配:类型 A 不是类型 C
}
class D<T extends B<T>> implements C<T>{
@Override
public void ok(T b) {
System.out.println(b.getId());
}
}
interface C<T extends B<T>>{
void ok(T b);
}
class A extends B<String>{
}
class B<T>{
private T id;
public T getId() {
return id;
}
public void setId(T id) {
this.id = id;
}
}
最佳答案
您必须使用通配符B<?>
。问题是C<T extends B<T>>
。您为 C 和 B 指定类型 T
。但你声明C<A>
。所以在你的情况下B
还获得类型 A
,但你的代码显示 class A extends B<String>
,其中B
必须是String
。同样的问题在D
。希望我的答案是明确的。
以下代码应该适合您:
public static void main(String[] args) {
C<A> t = new D<A>();
}
static class D<T extends B<?>> implements C<T> {
@Override
public void ok(T b) {
System.out.println(b.getId());
}
}
interface C<T extends B<?>> {
void ok(T b);
}
static class A extends B<String> {
}
static class B<T> {
private T id;
public T getId() {
return id;
}
public void setId(T id) {
this.id = id;
}
}
关于java泛型绑定(bind)不匹配: The type is not a valid substitute for the bounded parameter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35718151/
我是一名优秀的程序员,十分优秀!