我使用以下代码来获取跨度字符串中的所有跨度。
SpannableStringBuilder str = new SpannableStringBuilder(editText.getText());
Object [] objectSpans = str.getSpans(0, str.length(), Object.class);
//loop through all spans
for (Object objSpan: objectSpans) {
Spanned spanned = (Spanned) objSpan;// Here I encounter a ClassCastException
start = spanned.getSpanStart(new Object());
end = spanned.getSpanEnd(new Object());
...
}
我想将objSpan强制转换为Spanned时遇到以下ClassCastException(第6行)。
java.lang.ClassCastException:android.text.style.SpellCheckSpan无法
被强制转换为android.text.Spanned
我怎么解决这个问题?有没有更好的方法来获取跨度字符串中的所有跨度?
最佳答案
使用instanceof
代替自动进行转换。
for (Object objSpan: objectSpans) {
if(objSpan instanceof Spanned){
Spanned spanned = (Spanned) objSpan;// Here I encounter a ClassCastException
start = spanned.getSpanStart(new Object());
end = spanned.getSpanEnd(new Object());
...
}
}
要了解问题所在,您可以阅读以下
ClassCastException Documentation
以便阅读:抛出该异常以指示代码已尝试将对象强制转换为不是实例的子类。例如,以下代码生成ClassCastException:
因此,如果要执行
cast
,则必须确保该对象与所声明的对象类型相同,否则将得到一个ClassCastException