我正在学习以下文章中的过渡:Transitions - ADP。
他已经实现了方法toggleVisibility(),如下所示:
public void onClick(View v) {
TransitionManager.beginDelayedTransition(mRootView, new Fade());
toggleVisibility(mRedBox, mGreenBox, mBlueBox, mBlackBox);
}
private static void toggleVisibility(View... views) {
for (View view : views) {
boolean isVisible = view.getVisibility() == View.VISIBLE;
view.setVisibility(isVisible ? View.INVISIBLE : View.VISIBLE);
}
从上面我知道View... views
代表方法中的所有view
参数。但是,我从未见过这个...
运算符。它是什么?这个怎么运作?我google了坚果无法得到任何anser。任何人都可以帮助我吗?
答案 0 :(得分:4)
...
被称为varags。它允许您将任意数量的视图(0或更多)传递给该方法。
您可以调用它,例如:
toggleVisibility(); // no views
toggleVisibility(view1); // one view
toggleVisibility(view1,view2); // two views
...
它相当于将View[]
数组传递给方法。
编写方法调用时,编译器会将传递给该方法调用的参数与所有具有相同名称的方法的agrument列表进行匹配,以便找到最适合调用的方法。零个或多个View
实例(所有这些实例必须是方法调用中的最后一个参数)可以匹配方法定义中的单个View...
参数(必须是最后一个参数)。在方法内部,您可以将View...
变量视为View[]
类型的变量(即数组)。
在确定要调用的最合适的重载方法时,varargs参数具有最低优先级。因此,如果重载toggleVisibility()
,它将进行编译,并且在没有任何参数的情况下调用toggleVisibility()
将调用没有参数的方法。类似地,您可以声明优先于varargs版本的toggleVisibility(View v)
,但varargs中的要点是为您节省定义多个方法的需要,这些方法具有相同的名称和相同类型的参数,这些参数仅在数量上有所不同相同类型的参数。
答案 1 :(得分:3)
View ... views是一个可变参数。这意味着您可以向其传递任意数量的视图,用逗号分隔,就像它们是单独的参数一样。然后,该函数可以将该参数视图视为一个集合,其中包含在其中传递的所有参数。
答案 2 :(得分:0)
这是varagas,它允许您将零个或多个参数传递给函数。它允许您避免使用函数的重载版本或使用数组输入(常见的解决方法) varagas有2条规则,varagas也称为变量参数
1-每个函数只允许一个变量参数
2-变量参数应该是最后一个参数
void doSomething1(String... values, int x){}
给出编译时错误
void doSomething2(String... values, int... vals)
给出编译时错误
了解更多信息,请查看Varagas Docs