【问题标题】:ClassCastException in Android ScrollViewAndroid ScrollView 中的 ClassCastException
【发布时间】:2012-07-26 21:32:50
【问题描述】:

我的项目 (B) 中有一个类扩展(不是直接)ScrollView (A),可用于在垂直的月份字段滚动中设置一个值

这是继承层次结构: B 扩展 D 扩展抽象类 E 扩展 A

我正在使用一种 robotsium 方法,该方法获取当前活动中的所有滚动视图,该方法返回一个滚动视图的 ArrayList(ArrayList)。

我正在尝试分配该数组列表 ArrayList.get(0) 的第一个元素并尝试将其强制转换为 B 对象,如下所示:

ScrollView scrview =  new ScrollView(a.getApplicationContext());
ChildScrollView scrview1 = new ChildScrollView(a.getApplicationContext());

scrview = solo.getScrollViews().get[0];
scrview1 = (ChildScrollView) scrview; // I get the classcastexception here

有没有办法解决这个问题?

我也试过

ChildScrollView scrview1 = new ChildScrollView(a.getApplicationContext());
ScrollView scrview =  (ScrollView)new childScrollView(a.getApplicationContext());
//Also tried this --> ScrollView scrview = (ScrollView) scrview1;

scrview = solo.getScrollViews().get[0];
scrview1 = (ChildScrollView) scrview; // I get the classcastexception here

任何帮助将不胜感激。如果我遗漏了什么,请告诉我。

【问题讨论】:

  • 类可以转换为它们继承的类,而不是相反

标签: java android inheritance multi-level


【解决方案1】:

你得到一个例外,因为演员不能那样工作。这样想:所有ChildScrollView 也是ScrollView,因此在ScrollView 上下文中使用它们是有意义的。但是ScrollView 对象可能是也可能不是ChildScrollView

您可以使用reflection 在强制转换之前尝试在运行时确定对象的类,以确保强制转换是安全的。但是,我不确定您要使用上面的代码完成什么。您创建了一个由scrview1 引用的新对象,但随后立即将该变量分配给scrview?您能否详细说明您想要完成的工作?

【讨论】:

  • 我正在使用robotium 编写一个脚本,该脚本将使用Child 类中的一种方法单击滚动列表中的特定值,该滚动列表可以向上或向下滚动。但是,我只能在父对象中获取滚动视图。然后子类有一个方法 setMonth(int pos) 将月份设置为父类中不存在的参数中的 pos。我还尝试查看 (child instanceof parentclass) 是否有效并返回 true。
  • 我最终遍历了不同的滚动视图并使用具有模板参数的方法(类 extends Scrollview>)获取适当的视图。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-16
  • 1970-01-01
相关资源
最近更新 更多