[英]Why cannot generic extend a non-generic class in Java?
看起來Java中的generic
類無法擴展常規的非泛型類。 是什么原因呢? 有什么解決方法嗎?
我誤解了。 正如ColinD指出的那樣,我的問題實際上是例外。 誰能解釋為什么Java中不允許通用異常?
public class A {
}
public class B<T> extends A {
}
運作沒有任何問題。
Java似乎做到了:
public abstract class AbstractCollection<E>
extends Object
implements Collection<E>
您有一些代碼,以便我們可以看到問題嗎?
因為異常捕獲要求jvm在運行時(確切化)知道異常的確切類型,這在Java中是不可能的,因為所有類型參數信息都由編譯器擦除
您可以! -有一定的限制。 例外是那些限制之一。 您不能使它們通用。 如果您拋出異常的通用版本,Erasure會刪除異常類型信息,從而阻止異常層次結構正常工作。 太糟糕了 :(。
考慮一下:
import org.apache.commons.collections.set.UnmodifiableSet;
import org.apache.commons.beanutils.BeanMap;
//Can't do this:
//public class MyBeanMap<K, V> extends BeanMap implements Map<K,V>{
//Can do this:
public class MyBeanMap<K, V> extends BeanMap {
//Can't make actual method calls return generic types.
public V get(V arg0) {//Name clash
...
return (V)retval;
}
//Also can't do this:
@override
public V get(V arg0) {//Name clash
return (V)retval;
}
}
我想您可能會在現有接口的重寫方法中引發UnsupportedOperation異常,並實現自己的新通用方法:
公共V getGeneric(V){...}
但這似乎比實現外觀模式和僅擴展地圖代碼要難看得多,但這是大量用於為其創建外觀的中間代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.