是否存在View.getParent
()返回不属于ViewGroup
类型的对象的真实情况?或者我可以安全地投射它而不首先检查它的类型,如下面的代码示例中所示?
if (getParent() == null){
throw new IllegalStateException("View does not have a parent, it cannot be rootview!");
}
ViewGroup parent = (ViewGroup) getParent();
答案 0 :(得分:7)
如果比较ViewGroup和ViewParent的直接和间接子类,它们看起来是一样的(考虑到ViewGroup本身)。
在某些自定义库中,您可能会从getParent()
ViewParent
得到ViewGroup
而不是{{1}}。这是真的吗?
所以 - 如果你不能确定父类型,你最好检查一下。
- 在普通应用程序中,您通常了解父母是或可以是什么 - 所以您可以跳过检查
答案 1 :(得分:4)
安全。 Android SDK中ViewParent
的每个实现都是ViewGroup
。
但请记住,instanceof
也会检查无效性。你可以写:
if (!(getParent() instanceof ViewGroup)){
throw new IllegalStateException("View does not have a parent, it cannot be rootview!");
}
ViewGroup parent = (ViewGroup) getParent();
答案 2 :(得分:2)
如果你不做任何想象,那应该是安全的。唯一不安全的情况是当你到达视图的根部时。 ViewParent将是ViewRootImpl