0

Android開発のチュートリアルをいくつか見ていますが、以下のケースを見ました

MediaPlayer mp = MediaPlayer.create(this, R.id.song)

私の質問は次のとおりです。新しい MediaPlayer オブジェクトを作成するときに、「新しい」キーワードが含まれていないのはなぜですか? クラスのインスタンスを作成するときはいつでもnewを使用する必要があると思いました

じゃあどうすればいいの

MediaPlayer mp = new MediaPlayer(); 
mp.create(this, R.id.song);

これは間違っていますか?

4

3 に答える 3

3

私の質問は次のとおりです。新しい MediaPlayer オブジェクトを作成するときに、「新しい」キーワードが含まれていないのはなぜですか?

(おそらく) 新しいインスタンスを作成する静的メソッドを呼び出しています。

おそらく、そのメソッドはコンストラクターを直接呼び出すか、または何らかのサブクラスのインスタンスを作成します。または、代わりに既存のインスタンスへの参照を返す場合もあります。

これがファクトリ メソッドの良いところです。実装の詳細を隠すことができます :)

于 2012-08-03T14:12:04.870 に答える
0

MediaPlayerでnewを呼び出すことは実際に許可されています。

以下はhttp://developer.android.com/reference/android/media/MediaPlayer.htmlから抜粋したものです

MediaPlayerオブジェクトがnewを使用して作成されたとき、またはreset()が呼び出された後、アイドル状態になります[...]さらに、newを使用して作成されたMediaPlayerオブジェクトはアイドル状態になり、オーバーロードされたオブジェクトの1つで作成されたオブジェクトはアイドル状態になります。便利な作成メソッドはアイドル状態ではありません。実際、createメソッドを使用した作成が成功した場合、オブジェクトは準備済み状態になります。

基本的に、newメソッドとstaticメソッドを使用すると、MediaPlayerの状態が変わるだけです。新しいメソッドの場合は、setDataSource()で初期化し、onPrepare()で準備する必要があります。あなたのすべてが静的ヘルパーと一緒に行く準備ができているところ。

于 2012-08-03T14:21:16.173 に答える
0

これは「ファクトリー」関数です。内部的には を呼び出しnew MediaPlayer()ますが、クラスの外からは見えません。

于 2012-08-03T14:11:59.970 に答える