我试图从官方开发者网站和Udacity学习Android应用程序开发。一些变量声明如下:
ListView listView = (ListView) rootView.findViewById(R.id.listview_forecast)
或:
urlConnection = (HttpURLConnection) url.openConnection()
我的问题是为什么这些类型也包含在括号中?例如(ListView)和(HttpURLConnection)。 它是一个java的东西,还是特定于android?
答案 0 :(得分:2)
这是一个将一个对象的类型更改为另一个对象的对象。它不是Android的独特之处;这是一种Java语言功能。 Java中有关于何时可行的规则。通常在您想要将一个对象的类型更改为更具体的类型之一时使用它,这样您就可以调用原始类型无法使用的方法。
在第一个示例中,您展示了一个类型为ListView的强制转换。如果没有这种情况,方法的返回类型将是View,但您可能想要将它作为ListView做一些特殊的事情,并且您知道它是ListView,因为这是您在XML中声明它的方式布局。所以你就这样投了它。
答案 1 :(得分:0)
它与android的对象类型转换无关。 可以有2个转换java场景
·向上倾斜 ·向下倾斜
当我们沿着类层次结构在从根类到子类或子类的方向上转换引用时,它是一个向下转换。当我们沿着类层次结构在从子类到根的方向上转换引用时,它是一个向上转换。在这种情况下,我们不需要使用强制转换运算符。 在他使用findViewByid在xml文件中查找视图的情况下,它返回一个视图对象,然后将其向下转换为列表视图,以便您可以使用。
答案 2 :(得分:0)
这只是一种类型转换。
在你的第一个案例中
rootview.findViewById(R.id.listview_forecast)
将返回一个不是ListView的视图。所以为了获得引用,我们需要向下传播ListView。
在你的第二个案件中 (HttpURLConnection)url.openConnection()
将返回URLConnection而不是HttpUrlConnection,因此它被转发到HttpURLConnection。
答案 3 :(得分:0)
ListView listView = (ListView) rootView.findViewById(R.id.listview_forecast)
在此代码中,(ListView)
将方法View
返回的findViewById(//)
标记为类型ListView
。
同样,(HttpURLConnection)
会将url.openConnection
返回的值转换为HttpURLConnection
类型。
更简单的例子,您可以将浮点数转换为整数。
float a = 10.3;
int b = (int) a; // (int) will convert the 'a' into an integer and it's value will be 10
类型转换是编程和Java的一般概念,它对于android并不特殊。您可以在此处详细了解类型转换:Casting in Java