java - 需要泛型转换解释

标签 java generics bounded-wildcard

这里有两种形式可以使用扩展基类型的泛型:

public abstract <T extends Runnable> BlockingQueue<T> getQueueA();
public abstract BlockingQueue<? extends Runnable> getQueueB();

我不明白。有什么不同?这两种方法似乎都返回扩展 Runnable 对象的相同 BlockingQueue。

最佳答案

BlockingQueue<Thread> threads = thing.getQueueA(); // works

BlockingQueue<Thread> threads = thing.getQueueB(); // does not work

另一方面:

@Override public <T extends Runnable> BlockingQueue<T> getQueueA() {
    return new ArrayBlockQueue<Thread>(); // no worky
}
@Override public BlockingQueue<? extends Runnable> getQueueB() {
    return new ArrayBlockQueue<Thread>(); // works
}

关于java - 需要泛型转换解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21206073/

相关文章:

Java Generics Puzzler,扩展类并使用通配符

java - 表数据模型更改后 JTable cellEditor 保留

c# - 使用泛型进行多重调度

java - UML 类图 - 扩展通用抽象类的表示法?

c# - 泛型 c#.net

scala - 引用由抽象类型成员遮蔽的泛型类型参数

java - 是否需要在直通方法中使用有界通配符泛型?

java - 有没有办法使用 Java 中的接口(interface)来绑定(bind)泛型类型?

java - 为什么是 PRG 模式而不是其他模式?

java - Jax-RS - java Rest api 和 hibernate