簡體   English   中英

轉換CharSequence []和CharSequence []

[英]Converting CharSequence[] and CharSequence[]

我一直認為CharSequence []和String []是必不可少的,但是:

我有一些具有以下內容的代碼:

CharSequence[] mEntries;
...
String[] mEntriesString = (String[]) mEntries;
ListAdapter adapter = new ArrayAdapter<String>(getContext(), R.layout.two_lines_list_preference_row, mEntriesString)

當代碼運行時,我得到

java.lang.ClassCastException: java.lang.CharSequence[] cannot be cast to java.lang.String[]

有兩個問題?

  • 為什么這種轉換不會發生
  • 為什么ArrayAdapter不允許在其構造函數中使用CharSequence []。

CharSequenceStringStringBufferStringBuilder類實現的接口。 因此, CharSequence可以容納此實現類的任何Object,並且CharSequence#toString返回String ,嘗試-

String[] mEntriesString = new String[mEntries.length];
int i=0;
for(CharSequence ch: mEntries){
    mEntriesString[i++] = ch.toString(); 
}

CharSequence是一個接口。 String類實現該接口。 因此,您不能將其StringString ,也無法將List ArrayListArrayList ,因為它不必是該具體類的實例

您不能將引用CharSequence[]轉換為String[]

您只能在這種情況下進行投射:

        CharSequence[] charSequencesAsString = new String[] { "test" };
        String[] result = (String[]) charSequencesAsString;
        System.out.println(Arrays.toString(result));

解決問題的安全方法:

public static void main(String[] args) {

    CharSequence[] charSequencesAsString = new String[] { "test" };
    CharSequence[] charSequencesAsCharSequence = new CharSequence[] { "test" };
    CharSequence[] charSequencesAsStringBuilder = new StringBuilder[] { new StringBuilder("Test") };

    String[] stringsFromStrings = convertToStringArray(charSequencesAsString);
    String[] stringsFromCharSequence = convertToStringArray(charSequencesAsCharSequence);
    String[] stringsFromStringBuilder = convertToStringArray(charSequencesAsStringBuilder);

    System.out.println("Same array after conversion: " + (stringsFromStrings == charSequencesAsString));
    System.out.println("Same array after conversion: " + (stringsFromCharSequence == charSequencesAsCharSequence));
    System.out.println("Same array after conversion: " + (stringsFromStringBuilder == charSequencesAsStringBuilder));
}

public static String[] convertToStringArray(CharSequence[] charSequences) {
    if (charSequences instanceof String[]) {
        return (String[]) charSequences;
    }

    String[] strings = new String[charSequences.length];
    for (int index = 0; index < charSequences.length; index++) {
        strings[index] = charSequences[index].toString();
    }

    return strings;
}

暫無
暫無

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

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