在android中的一些变量声明中,类型在括号中声明。为什么?

时间:2016-02-09 05:24:53

标签: java android

我试图从官方开发者网站和Udacity学习Android应用程序开发。一些变量声明如下:

ListView listView = (ListView) rootView.findViewById(R.id.listview_forecast)

或:

urlConnection = (HttpURLConnection) url.openConnection()

我的问题是为什么这些类型也包含在括号中?例如(ListView)和(HttpURLConnection)。 它是一个java的东西,还是特定于android?

4 个答案:

答案 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