-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しかし、私はこの...オペレーターの前に見たことがありません。それは何ですか?使い方?ナットをググって、アンサーを取得できませんでした。誰でも私を助けることができますか?

4

3 に答える 3

4

...varag と呼ばれます。そのメソッドに任意の数 (0 以上) のビューを渡すことができます。

たとえば、次のように呼び出すことができます。

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

View[]メソッドに配列を渡すのと同じです。

メソッド呼び出しを記述すると、コンパイラは、そのメソッド呼び出しに渡されたパラメーターを、同じ名前を持つすべてのメソッドの引数リストと照合して、呼び出すのに最適なメソッドを見つけます。の 0 個以上のインスタンスView(すべてがメソッド呼び出しの最後のパラメーターである必要があります) はView...、メソッド定義の 1 つの引数 (最後のパラメーターである必要があります) と一致させることができます。メソッド内ではView...、変数をView[]型の変数 (つまり、配列) として扱うことができます。

varargs パラメーターは、呼び出すのに最適なオーバーロードされたメソッドを決定する際の優先順位が最も低くなります。したがって、 をオーバーロードtoggleVisibility()するとコンパイルされ、toggleVisibility()引数なしで呼び出すと、引数のないメソッドが呼び出されます。同様にtoggleVisibility(View v)、varargs バージョンよりも優先されるものを宣言できますが、varargs のポイントは、同じ名前と同じタイプのパラメーターを持つ複数のメソッドを定義する必要をなくすことです。タイプ。

于 2015-01-01T11:41:09.723 に答える
3

View... views は可変引数です。つまり、個別の引数であるかのように、コンマで区切られた任意の数のビューを渡すことができます。関数は、そのパラメーター ビューを、その中に渡されたすべての引数を含むコレクションとして扱うことができます。

于 2015-01-01T11:39:41.627 に答える
0

これは varagas で、ゼロまたは複数の引数を関数に渡すことができます。関数のオーバーロードされたバージョンの使用や配列入力の使用を避けることができます (一般的な回避策) varagas には 2 つのルールがあり、varagas は可変引数とも呼ばれます

1- 関数ごとに 1 つの変数引数のみが許可されます

2- 変数引数は最後の引数でなければなりません

void doSomething1(String... values, int x){} コンパイル時エラーを与える

void doSomething2(String... values, int... vals)コンパイル時エラーを与える

詳細については、Varagas のドキュメントを参照してください。

于 2015-01-01T11:53:35.067 に答える