簡體   English   中英

需要泛型鑄造解釋

[英]Generics casting explanation needed

以下是使用泛型擴展基類型的兩種形式:

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
}

盡管兩個類型的返回隊列都擴展了Runnable,但區別在於第一個版本是類型化方法,並且類型T在方法內部和編譯器中可用,因此它可以在調用方法時推斷出類型。

第二個版本沒有這些好處:它只返回類型未知的隊列,但擴展了Runnable。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM