gpt4 book ai didi

java - 关于 Java 中的接口(interface)和泛型的问题 : type mismatch error

转载 作者:行者123 更新时间:2023-12-04 06:15:44 27 4
gpt4 key购买 nike

假设我有以下界面:

public interface Interface<T extends Number>{
public Vector<Interface<T>> getVector();
}

以及实现该接口(interface)的以下类:
public abstract class C<T extends Number> implements Interface<T>{

private Vector<C<T>> vector;
public Vector<Interface<T>> getVector(){ //errror
return this.vector;
}
}

为什么返回 Vector<C<T>> 不合法同时返回 Vector<Interface<T>> 是合法的(显然) . C实际执行 Interface ,所以应该是可以的吧?我错过了什么?

编辑:

为什么这适用于非泛型接口(interface)?这实际上是一个通用的相关问题吗?
public interface Interface{
public Interface getVector();
}

public abstract class C implements Interface {

private C;
public Interface getVector(){ //errror
return this.c;
}
}

最佳答案

因为Vector明确由 Interface<T> 组成,而不是扩展 Interface<T> 的东西,我相信如果您将定义更改为

 public Vector<? extends Interface<T>> getVector();

问题是对于一些 V implements TV extends TFoo<V>不是 Foo<T> 的父类(super class)型.除非您明确指出该扩展点,否则编译器不会测试泛型参数的继承。

使用 Vector<? extends Interface<T>>表示“允许任何实现或扩展 Interface<T> 的类,而 Vector<Interface<T>> 表示仅由 Interface<T> 项组成的 vector 。

也许更具体地考虑 List<Integer>不是 List<Number> 的可接受替代品尽管 Integer延长 Number出于完全相同的原因。

更新 :

我对此进行了测试,以下编译没有任何错误或警告
interface Interface<T extends Number>{
public Vector<? extends Interface<T>> getVector();
}

abstract class C<T extends Number> implements Interface<T>{

private Vector<C<T>> vector;
public Vector<? extends Interface<T>> getVector(){
return this.vector;
}
}

关于java - 关于 Java 中的接口(interface)和泛型的问题 : type mismatch error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7277829/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com