我无法理解与泛型相关的子类型/接口实现背后的概念。请解释。我有以下结构:
`ICommand -> ProducerConsumerCommand`
IProducerConsumer -> SimpleProducerConsumer
我的理解是,任何实现 IProducerConsumer 的具体类都必须包含 T 类型的对象,它是 Number 和 ICommand 接口的子类。
IProducerConsumer<T extends Number,ICommand>
现在想写一个实现类SimpleProducerConsumer,
现在我的意图是我想告诉 SimpleProducerConsumer 可以保存 IProducerConsumer 类型参数中定义的任何类型参数,如下所示:
public class SimpleProducerConsumer<T,ICommand> implements Runnable,
IProducerConsumer<T,ICommand> {
它不起作用,它说如下:
SimpleProducerConsumer<T,ICommand> - ICommand complains (warning) that it is getting hidden.
IProducerConsumer<T,ICommand> - compiler errors in T saying as below
*绑定不匹配:类型 T 不是该类型的有界参数的有效替代品IProducerConsumer<T,ICommand>*
所以,我的第一个问题是为什么我不能在具体类中定义与接口相同的方式。幕后发生的事情。
如果我能定义
public class test<ICommand> {}
为什么我在实施时不能做同样的事情,令人困惑。
现在我定义如下
public class SimpleProducerConsumer<T,ProducerConsumerCommand> implements Runnable,
IProducerConsumer<T,ICommand> {
IProducerConsumer 中仍然有 T 抱怨。
如果我改变如下:
public class SimpleProducerConsumer<T,ProducerConsumerCommand> implements Runnable,
IProducerConsumer<T extends Number,ICommand> {
扩展抱怨说要删除令牌。
现在我这样做如下:
public class SimpleProducerConsumer<T extends Number,ProducerConsumerCommand> implements Runnable,
IProducerConsumer<T extends Number,ICommand> {
仍然在 IProducerConsumer 中扩展不起作用。
现在
public class SimpleProducerConsumer<T extends Number,ProducerConsumerCommand> implements Runnable,
IProducerConsumer<T,ICommand> {
是的,现在编译器很高兴。现在我完全迷路了,上面的东西是什么意思。SimpleProducerConsumer 包含 T 类型的对象,它们是 Number 和 ProducerCommand 对象的子类,但 IProducerConsumer 包含 T 类型的对象???这是什么 ?
这背后的原理是什么。有人可以解释一下吗?