2016-05-01 159 views
0

我正在創建一個由數組支持的泛型類型的堆棧。當我嘗試創建一個泛型類型數組時,Java不允許我。我被告知必須創建一個Object類型的數組並將其轉換爲泛型類型。我已經鑄造了我的Object數組來輸入,但是我怎樣才能處理Java一直給我的Unchecked Type錯誤?將對象數組轉換爲泛型類型

public class AStack<T>{ 
// Create a stack with the default capacity 10. The stack expands 
// its internal array when the number of elements pushed() into it 
// would exceed the internal capacity. 

Object arr[]; 
int top=-1; 

public AStack(){ 
int defSize=10; 
arr = (T[])new Object [defSize]; 
} 

這是我到目前爲止的地方。

UPDATE: 我創建對象數組,然後鑄造返回類型在方法結束時爲T類型。

+0

我沒有看到我的做法有問題,怎麼了? – ChrisAngj

+1

你可以這樣做:像這樣創建一個通用的AStack類AStack ....聲明數組像E [] arr =(E [])new Object [size]; - >這會產生一個警告,但是你可以忽略這個,因爲在類型擦除E的時候,反正你會留下一個Object數組....現在你的方法都可以假設這個數組是E類型的而且沒有強制轉換。 ... – Madhusudhan

+2

http://stackoverflow.com/questions/14524751/cast-object-to-generic-type-for-returning – DarkV1

回答

-1

你可以使用一個接口或擴展到所有你想使通用的,然後使用該接口或類作爲數組類型的其他類的類,現在你可以插入你的特定類型的入陣。

GenericType[] array = { new specificType1(), new specificType2(), new specificType3() } 
2

最簡單的方法是使用類型變量將對象數組轉換爲所需的類型。

public class AStack<T> { 
    T arr[]; 
    int top=-1; 

    public AStack() { 
     int defSize=10; 
     arr = (T[]) new Object [defSize]; 
    } 
} 
+0

這是我在我現在,我該怎麼應對「未投」警告? – ChrisAngj

+1

你總是可以用@SuppressWarnings(「unchecked」)來壓制它。看看這個線程:http://stackoverflow.com/questions/509076/how-do-i-address-unchecked-cast-warnings –

+0

當我的數組上面實例化我的數組像這樣:T arr [],會我必須將其實例化爲T類型或對象類型? – ChrisAngj