2016-01-10

Java Generic Creation

有時在製作 Java 類別會應用到 Generic
但製作 Generic 時會發生如 Generic Array Creation 的錯誤
應如何正式宣告 Generic ?

首先要明 Generic Creation 如何發生

一般在 Java 宣告一個類別 (或類型) 可以使用
Object object = new Object();

因為 Java 的 Object 類別有一個 constructor 為 Object() ,因此能以 Object() 建立 Object
但當 Object 改為 Generic 時
Generic generic = new Generic();
由於 Java 不能確定 Generic 的 constructor 語法
只能指派 null 建立 Generic
Generic generic = null;

另一個情況是 Generic Array Creation
製作類別偶然是需要應用 Generic Array
一般 Java 宣告 array 為
Object[] objects = new Object[2];

Object[] objects = {new Object(), null};

new Object[2] 為宣告建立一個具有 2個元素 的 Object array
{new Object(), null} 為宣告建立一個以直接指派資料的 Object array

Generic array 則有些建立限制
原則上 Generic 是能以 null 建立
但在 Java 上使用
Generic[] generics = new Generic[1];

Generic[] generics = {null};
會出現 Generic Array Creation 的錯誤
看來 Java 當遇到 Generic 及 new 或 大括弧 便禁止
但 Generic Array 仍然有機會使用,唯有借用 Object 來處理

Objects[] objects = new Object[2];
Generic[] Generics = (Generic[]) objects;
Object 是 java 中任何類別的父項,因此 Object 能轉換成其他類別,不過事實上主要是因為借用 Object array 預設資料為 null
由於 new Object[2] 會以 null 指派至 object[0] 及 object[1] 而 null 是唯一 Generic 能接受指派的資料
最後以 Generic[] 強制型態轉,將 Object array 轉為 Generic array 便成功

沒有留言 :

張貼留言