然而,我一直认为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[]那么两个问题?
发布于 2013-02-20 15:29:23
CharSequence是String、StringBuffer、StringBuilder类实现的接口。所以CharSequence可以保存这个实现类的任何一个对象,CharSequence#toString返回String,尝试-
String[] mEntriesString = new String[mEntries.length];
int i=0;
for(CharSequence ch: mEntries){
mEntriesString[i++] = ch.toString();
}发布于 2013-02-20 15:29:39
CharSequence是一个接口。String类实现了该接口。因此,不能将其转换为String,就像不能将List转换为ArrayList一样,因为它不必是该具体类的实例
发布于 2013-02-20 15:33:16
不能将引用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;
}https://stackoverflow.com/questions/14983577
复制相似问题