5

私のAndroidプロジェクトでは、ボタンのクリック、接続イベント、またはDilaog.onShow()などのUIイベントを操作するためのいくつかのコールバックを定義しています。デモの目的で、アクティビティコードから起動する必要があるRunnableインターフェイスを選択しました。Javaでは、自分自身を表現するさまざまな方法があります。

1つのパターンは、匿名クラスを使用することです

runOnUiThread(new Runnable() { 
    public void run() { 
        doSomething(); 
    }
});

private void doSomething() {
}

別の-内部プライベートクラスを定義する、すなわち

private DoSomething implements Runnable {
    public void run() { 
        // do something; 
    }
}
...
runOnUiThread(new DoSomething());

さらに別の-このようにプライベートメンバーを使用するには:

private final Runnable doSomething = new Runnable() {
    public void run() { 
        // do something; 
    }
}
...
runOnUiThread(doSomething);

これが私が一番好きなもう1つです。これは、誰かが実際に使用しない限り、実際にはオブジェクトを構築しないためです。余分なクラスを回避し、必要に応じてパラメーターを受け取ることができるためです。

private Runnable doSomething() { 
    return new Runnable() {
        public void run() { 
            // do something; 
        }
    }
}
...
runOnUiThread(doSomething());

私は好みや宗教的信念の議論ではなく、コードの保守性とパフォーマンスの議論を探しています。私は自分の好み、おそらくは与えられた状況に応じて異なる好みを開発するのに役立つヒントやアドバイスを受け取りたいと思います。

ネタバレ:

Javaの進歩により、この質問は廃止されました。受け入れられた回答を参照してください。

4

5 に答える 5

2

コールバックを処理する慣用的な方法はないと思います。

私は通常、最初に匿名クラスをインライン化します。メソッドが大きくなりすぎると、クラスの作成を別の関数に抽出します。クラスが大きくなりすぎると、独自のファイルに抽出します。

EclipseなどのIDEを使用している場合は、これらすべてのリファクタリングを自動的かつ安全に実行できます。

于 2011-12-12T18:30:22.683 に答える
2

@ManuelSilvaや@TobyChampionのように、私は匿名の内部クラスが嫌いです。それらはやや読みづらく、拡張できない、DIP、セッター、または動作を微調整するものなどを持たないという点であまり「OO」ではなく、DRYの原則に違反することがよくあります。 27の異なる場所に同じコードを追加した場合。

私はプライベートメンバー(オプション#3)、または通常getAsRunnable()という名前のプライベート関数(4番目のスタイル)を使用する傾向があります。

于 2011-12-12T18:45:20.833 に答える
1

私はAndroidを初めて使用しますが、匿名のクラスを使用すると気分が悪くなり、とにかくrunOnUiThreadの代わりになるようです:AsyncTask、ここで説明します: runOnUIThreadの質問

于 2011-12-12T17:28:12.010 に答える
0

私の見解では、匿名クラスは本当に読みやすさを低下させます。Uiコードは非常に冗長であることが多いため、すべてのボタンに匿名のコールバックを追加すると、非常に大きなクラスになる可能性があります。結果として、私は内部プライベートクラスを使用しています。

于 2010-09-15T14:52:27.993 に答える
0

今日、Java 8がAndroidでほぼ利用可能であり、Android Studioが自動的にラムダがすでにサポートされているふりをしている場合、匿名クラス(#1)ソリューションが当然の選択のようです。

崩壊した

拡張

于 2016-01-07T04:53:10.623 に答える