簡體   English   中英

Java:了解通用數組的類型擦除

[英]Java: Understanding Type Erasure with Generic Arrays

我想知道我是否正確理解以下Java問題。 給定一個通用集合,如果我這樣做

public class HashTable<V extends Comparable<V>> implements HashTableInterface<V> {
    private V[] array;

    public HashTable() {
        this.array = (V[]) new Object[10];
    }
}

代碼中斷,並引發異常:java.lang.ClassCastException: [Ljava.lang.Object; 無法轉換為[Ljava.lang.Comparable;

但是,如果我更改this.array = (V[]) new Object[10]; this.array = (V[]) new Comparable[10]; 然后就可以了。

我的理解是,編譯后生成的字節碼將沒有任何泛型引用,因為它們已被Java的類型擦除所取代。

this.array = (V[]) new Object[10]; 中斷,因為該行將被this.array = (Comparable[]) new Object[10];隱式替換this.array = (Comparable[]) new Object[10]; 這將導致強制轉換異常,因為Object不擴展Comparable。 通過將其更改為可比較數組來解決。

這個對嗎? 謝謝!

擦除類型變量以消除其最左邊界 因此, V被擦除為|Comparable<V>| = Comparable |Comparable<V>| = Comparable 如果將邊界更改為Object & Comparable<V>則擦除將變為|Object| = Object |Object| = Object(V[]) new Object[10]也將起作用。

暫無
暫無

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

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