2013-03-30 49 views
2

我寫一個函數來獲取boolean陣列,從arraylist<boolean>boolean陣列 但我得到的錯誤:在ArrayList類型<Boolean>方法指定者(T [])是不適用的參數(布爾[])

The method toArray(T[]) in the type ArrayList is not applicable for the arguments (boolean[])

ArrayList<Boolean> fool = new ArrayList<Boolean>(); 

    for (int i = 0; i < o.length(); i++) { 
     if (Integer.parseInt(o.substring(i,i+1))==1) { 
      fool.add(true); 
     } else { 
      fool.add(false); 
     } 
    } 

    boolean[]op=fool.toArray(new boolean[fool.size()]); 

如果我改變boolean[]opBoolean[]op類型,即是工作,但我需要boolean[] ..

所以,我怎樣才能得到boolean數組?

+0

當布爾[]可以以同樣的方式工作時,爲什麼需要布爾值[]? –

+0

@Sudhanshu因爲我有其他函數'公共字符串BoolToStr(布爾[]輸入)'訪問需要布爾[] – chanjianyi

回答

4

原始類型不能用於仿製藥。爲了使陣列匹配的T[]類型簽名,則必須使用就像你在ArrayList的聲明做了Boolean包裝類,即使你不希望最後的數組是此類型:

Boolean[] op = fool.toArray(new Boolean[fool.size()]); 

使用泛型沒有辦法獲得原始數組的基本數組,並且自動裝箱或鑄造不能與數組一起工作(例如,不可能將基元類型的數組分配給包裝類型的數組,反之亦然)。得到你想要的數組的唯一方法是做硬盤的方式,用循環:

boolean[] op = new boolean[fool.size()]; 

for(int n = 0; n < temp.length; n++) 
{ 
    //autoboxing implicitly converts Boolean to boolean 
    op[n] = fool.get(n); 
} 

這也許可以更優雅地使用map構建在Java中8

來實現在個人請注意,泛型不適用於基元的事實是java中真正令我感到困擾的少數幾件事之一。我不打算與設計師爭論,但爲了對不同類型的數組做同樣的事情,必須編寫七種不同的函數似乎無視了首先爲語言添加泛型特性的全部意義。請看java.util.Arrays class;不得不編寫這種代碼足以讓我想切換到C++。

3

如果你真的想boolean[]那麼填充列表和最後轉換列表到一個數組不應該是必要的。只要做到以下幾點:

boolean[] bools = new boolean[o.length()]; 
for (int i = 0; i < o.length(); i++) { 
    bools[i] = Integer.parseInt(o.substring(i,i+1)) == 1; 
} 

注意:fool.toArray(new boolean[fool.size()])不起作用事實是因爲該方法是一種通用的方法,並在Java泛型不適合原語工作。它僅適用於參考類型(即對象)。

相關問題