每当我们想要扩大视图或获取资源时,我们都必须在运行时对其进行转换。例如,视图的用法如下:
过去,我们需要在本地进行投射
(RelativeLayout) findViewById(R.id.my_relative_layout_view)
现在,我们使用泛型
findViewById<RelativeLayout>(R.id.my_relative_layout_view)
我的问题是,为什么编译器(或生成R类的人)不同时保留对元素类型的某种引用(无论是字符串,int还是其他类型,都没有关系)其他类型),这样就不会发生铸造问题
答案 0 :(得分:1)
我们无法真正推测出那是一种设计选择。
可能是因为他们希望避免使APK膨胀。每个ID都需要该类的完整软件包名称。 android.R中的每个ID也是如此。由于R封装在每个APK中。
但是,如果您使用的是Kotlin,则甚至可以取消泛型检查。 Kotlin将自动确定它。
val view = findViewById(R.id.my_relative_layout_view)
view.method()
或更简单些,如果使用合成的话:
my_relative_layout_view.method()
此外,如果您正在使用数据绑定,则可以像这样访问它:
binding.my_relative_layout_view.method()