6

これは初歩的な質問かもしれませんが、なぜコンストラクターではなく Toast を作成するために静的メソッド (makeText) を使用しなければならないのか疑問に思っていました。

なぜこれを使用する必要があるのですか:

makeText(Context context, CharSequence text, int duration)

これの代わりに:

new Toast(Context context, CharSequence text, int duration) 

これは makeText メソッドです:

    public static Toast makeText(Context context, CharSequence text, int duration) {
        Toast result = new Toast(context);

        LayoutInflater inflate = (LayoutInflater)
                context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View v = inflate.inflate(com.android.internal.R.layout.transient_notification, null);
        TextView tv = (TextView)v.findViewById(com.android.internal.R.id.message);
        tv.setText(text);

        result.mNextView = v;
        result.mDuration = duration;

        return result;
    }

なぜ私たちは次のものを持っていないのですか:

public Toast (Context context, CharSequence text, int duration) {
    this(context);

    LayoutInflater inflate = (LayoutInflater)
            context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View v = inflate.inflate(com.android.internal.R.layout.transient_notification, null);
    TextView tv = (TextView)v.findViewById(com.android.internal.R.id.message);
    tv.setText(text);

    this.mNextView = v;
    this.mDuration = duration;
}

何らかの理由で Web とソース コードを検索しましたが、見つかりませんでした。

アイデアがあれば、遠慮なくどうぞ。

4

3 に答える 3

2

1 つのルール: 「オブジェクトがまだ作成されていない場合でも、このメソッドを呼び出すことに意味があるか?」と自問してください。もしそうなら、それは間違いなく静的でなければなりません。

オブジェクトはメモリ内に存在し、特定のジョブのために作成されることに注意してください。静的メソッドはクラス内のすべてのオブジェクトで使用でき、それらを使用するためにオブジェクトを作成する必要はありません。

したがって、メソッドにアクセスできるようにするためにオブジェクト Toast を作成する理由はありませんmakeText。静的メソッドとしてアクセスできる場合 (よりエレガントでコンパクト)

于 2012-07-30T09:00:29.787 に答える
1

私の知る限りでは:

これは、Toast オブジェクトのインスタンスを保持したくないためです。これには、GarbageCollector によってクリーンアップされるまで永続的に使用される大量のメモリが必要になります。

また、常に表示にアクセスできるため、アプリケーションで一連のアクセス許可を持つ必要はありません。

于 2012-07-30T08:59:00.740 に答える