這算是個數組缺陷吧

114 阅读1分钟

這段代碼居然能編譯通過

運行:java.lang.ArrayStoreException: java.lang.String

        Object[] arr = new Long[1];
        arr[0] = "hello";

相比之下,列表好一些

編譯時就不通過

List<Object> list = new ArrayList<Long>();

數組是協變的,多用List

這是一個集合轉array,很複雜,需要强轉來消除警告

    private final T[] list;
    public Test(Collection<T> list) {
        this.list = (T[]) list.toArray();
    }

這是一個集合轉List,一切ok,簡單明瞭

    private final List<T> list;
    public Test(Collection<T> list) {
        this.list = new ArrayList<>(list);
    }

這個問題主要是因爲汎型的類型擦除