[英]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[]
有兩個問題?
CharSequence
是String
, StringBuffer
, StringBuilder
類實現的接口。 因此, CharSequence
可以容納此實現類的任何Object,並且CharSequence#toString
返回String
,嘗試-
String[] mEntriesString = new String[mEntries.length];
int i=0;
for(CharSequence ch: mEntries){
mEntriesString[i++] = ch.toString();
}
CharSequence
是一個接口。 String
類實現該接口。 因此,您不能將其String
為String
,也無法將List
ArrayList
為ArrayList
,因為它不必是該具體類的實例
您不能將引用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.