簡體   English   中英

從Generic Supertype擴展?

[英]Extend from Generic Supertype?

在Java中,我是否可以從通用超類型擴展? 根據這篇文章,看起來我應該能夠: http//www.ibm.com/developerworks/java/library/j-djc05133.html

public abstract class MyClass<T> extends T {

但是,當我在我的應用程序中執行類似操作時,我收到以下錯誤: “無法將類型參數T稱為超類型。”

有誰知道我是否能夠從Java中的通用超類型擴展? 而且,如果是這樣,是否需要一些特殊的東西來實現這一目標?

編輯:我讀錯了文章。 它實際上正在討論這個潛在的問題。

能夠從具有泛型類型參數的超類型繼承。 例如:

public class MyList<T> extends AbstractList<T>

(甚至給出參數界限,例如):

public class MyStringList extends AbstractList<String>

無法定義具有通配符超類型的類。 這樣的概念在Java中沒有任何意義(我不相信它在摘要中有很多價值)。 MonitoredDevice示例中,我甚至不確定您期望的功能。

由於擦除,這在Java工作方式的基礎上是不可能的。 每個類都必須有一個超類 - MonitoredDevice的超類是什么? MonitoredDevice對象有哪些可用的方法? 您將無法在此類上調用任何繼承的方法,因為編譯器無法保證此類方法存在,字節碼也不能表示此類調用。

我懷疑使用動態代理可以更好地實現您嘗試做的事情。

編輯:好的,在完全閱讀文章后,我可以看到這樣一個聲明背后的動機是什么。 但在完全閱讀完文章后,您也意識到目前Java不支持這一點。 根本原因是由於擦除; 在當前的機制下,這種技術永遠不可能實現,文章詳細介紹了具體阻止這種技術發揮作用的細節。

從該錯誤消息中聽起來你正試圖從類型參數本身擴展,這是你不能做的,因為在運行時擦除了類型。 如果這不是您要做的,請發布您的代碼。

暫無
暫無

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

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