我使用以下代码来获取可跨越字符串中的所有跨度。
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 cannot be cast to 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
所以你可以阅读:
Thrown to indicate that the code has attempted to cast an object to a subclass of which it is not an instance. For example, the following code generates a ClassCastException:
因此,如果您想要进行cast
,您必须确保该对象与您声明的对象类型相同,否则您将得到一个ClassCastException
关于java - 使用 getSpans 方法获取 Spannable 中的所有 Span,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58008311/