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 对象处于空闲状态,而那些使用重载之一创建的对象方便的创建方法不处于空闲状态。实际上,如果使用 create 方法创建成功,则对象处于 Prepared 状态。

基本上使用新方法与静态方法只会改变您的 MediaPlayer 所处的状态。如果您使用新方法,则必须使用 setDataSource() 对其进行初始化并使用 onPrepare() 进行准备。准备好使用静态助手了。

于 2012-08-03T14:21:16.173 回答
0

这是一个“工厂”功能。它在内部调用new MediaPlayer(),您只是在课堂外看不到它。

于 2012-08-03T14:11:59.970 回答