-1

我正在从以下文章中学习过渡: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参数。但是,我从来没有见过这个...运营商。它是什么?这个怎么运作?我用谷歌搜索 nut 找不到任何分析器。谁能帮我?

4

3 回答 3

4

...被称为可变参数。它允许您将任意数量的视图(0 个或更多)传递给该方法。

您可以调用它,例如:

toggleVisibility(); // no views
toggleVisibility(view1); // one view
toggleVisibility(view1,view2); // two views
...

它相当于将View[]数组传递给方法。

当您编写方法调用时,编译器会将传递给该方法调用的参数与具有相同名称的所有方法的 agrument 列表进行匹配,以便找到最适合调用的方法。零个或多个实例View(所有这些实例都必须是方法调用中的最后一个参数)可以匹配到View...方法定义中的单个参数(必须是最后一个参数)。在方法内部,您可以将View...变量视为View[]类型变量(即数组)。

在确定要调用的最合适的重载方法时,可变参数参数的优先级最低。因此,如果您重载toggleVisibility(),它将编译,并且toggleVisibility()不带任何参数的调用将调用不带参数的方法。同样,您可以声明toggleVisibility(View v)哪个将优先于可变参数版本,但可变参数的重点是让您无需定义多个具有相同名称和相同类型参数的方法,这些方法仅在相同的参数数量上有所不同类型。

于 2015-01-01T11:41:09.723 回答
3

View...views 是一个可变参数。这意味着您可以将任意数量的视图传递给它,用逗号分隔,就好像它们是单独的参数一样。然后,该函数可以将该参数视图视为一个集合,其中包含传入的所有参数。

于 2015-01-01T11:39:41.627 回答
0

这是 varagas,它允许您将零个或多个参数传递给函数。它允许您避免使用函数的重载版本或使用数组输入(一种常见的解决方法) varagas 有 2 个规则,varagas 也称为变量参数

1- 每个函数只允许一个变量参数

2-变量参数应该是最后一个参数

void doSomething1(String... values, int x){} 给出编译时错误

void doSomething2(String... values, int... vals)给出编译时错误

欲了解更多信息,请查看Varagas 文档

于 2015-01-01T11:53:35.067 回答