Android 我怎么可能将视图投射到线性布局中?

Android 我怎么可能将视图投射到线性布局中?,android,Android,我不知道为什么Android允许我这么做?或者这是正确的吗 我有这样的代码: LinearLayout linearLayout = (LinearLayout) this.findViewById(R.id.mainid); findViewById返回一个视图,但我将其转换为一个线性布局,该布局扩展了一个视图组。这不是一件危险的事情吗,因为我并没有得到任何可能需要设置的LinearLayout属性?或者从这个cast调用其中一个方法不会导致问题,因为我们还没有为它分配内存吗?如果您

我不知道为什么Android允许我这么做?或者这是正确的吗

我有这样的代码:

    LinearLayout linearLayout = (LinearLayout) this.findViewById(R.id.mainid);

findViewById返回一个视图,但我将其转换为一个线性布局,该布局扩展了一个视图组。这不是一件危险的事情吗,因为我并没有得到任何可能需要设置的LinearLayout属性?或者从这个cast调用其中一个方法不会导致问题,因为我们还没有为它分配内存吗?

如果您查看的类结构,您将看到
视图组继承
视图
,因此您可以这样做。

视图组
视图
的一种特殊化,因此,强制转换实际上是有效的:


当然,作为任何演员,你都应该知道自己在做什么,除非可怕的
ClassCastException
发生。

LinearLayout
是一个
视图组
,一个包含其他视图的
视图。
因此,您可以将
视图
强制转换为
视图组
这就是你在做的

(LinearLayout) this.findViewById(R.id.mainid);
当前,在演员阵容结束之前,请思考
视图

View v = LinearLayout(R.id.mainid)
实际对象类型为
LinearLayout


您可以向下转换为
线性布局
,因为这是对象的实际类型

,这就解释了这一点。所以你是说如果实际对象不是线性布局,它会导致未定义的行为。是的,因此,下面提到的类强制转换异常我不确定其他答案是否有这么多的向上投票,如果在视图对象实际上不是线性布局的情况下,将视图对象错误地强制转换为线性布局,则可能会出现严重错误。这就是为什么您应该提供ID来帮助您区分不同的类型views@mskw你不能向前投要强制转换到某个对象的某个对象(如果这是一个单词)意味着类必须从该类继承。对象不是从LinearLayout继承的,对象是所有对象的基类。如果随机对象不是从该对象继承的,则可以将其强制转换为stuff对象object=new object()。线性布局布局=对象;这不起作用,因为对象不是LinearLayout@mskw不,我只是说object不会继承LinearLayout@mskw,如果你读了tyczj发布的链接,你会发现演员阵容将由开发者决定。编译器只需看到
LinearLayout
isa
视图
并说“ok”。事实上,它可能不是你必须注意的东西。@mskw是的,这就是我们一直在说的对象。如果你试着把它投给domething,它不仅仅是说TextView或者其他什么,你会得到ClassCastException不知道为什么人们会否决一个合法的问题。