首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >转换CharSequence[]和CharSequence[]

转换CharSequence[]和CharSequence[]
EN

Stack Overflow用户
提问于 2013-02-20 15:26:16
回答 3查看 8.9K关注 0票数 1

然而,我一直认为CharSequence[]和String[]同样重要:

我有一些代码,它有以下内容:

代码语言:javascript
复制
CharSequence[] mEntries;
...
String[] mEntriesString = (String[]) mEntries;
ListAdapter adapter = new ArrayAdapter<String>(getContext(), R.layout.two_lines_list_preference_row, mEntriesString)

当代码运行时,我得到

代码语言:javascript
复制
java.lang.ClassCastException: java.lang.CharSequence[] cannot be cast to java.lang.String[]

那么两个问题?

  • 为什么这样的演员不会发生
  • 为什么ArrayAdapter不允许在其构造函数中使用CharSequence[]。
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-02-20 15:29:23

CharSequenceStringStringBufferStringBuilder类实现的接口。所以CharSequence可以保存这个实现类的任何一个对象,CharSequence#toString返回String,尝试-

代码语言:javascript
复制
String[] mEntriesString = new String[mEntries.length];
int i=0;
for(CharSequence ch: mEntries){
    mEntriesString[i++] = ch.toString(); 
}
票数 6
EN

Stack Overflow用户

发布于 2013-02-20 15:29:39

CharSequence是一个接口。String类实现了该接口。因此,不能将其转换为String,就像不能将List转换为ArrayList一样,因为它不必是该具体类的实例

票数 1
EN

Stack Overflow用户

发布于 2013-02-20 15:33:16

不能将引用CharSequence[]转换为String[]

只有在这种情况下你才能投出它:

代码语言:javascript
复制
        CharSequence[] charSequencesAsString = new String[] { "test" };
        String[] result = (String[]) charSequencesAsString;
        System.out.println(Arrays.toString(result));

解决问题的安全方法:

代码语言:javascript
复制
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;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14983577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档