Java 为什么这个方法是静态的?
我正在开发一个以示例为基础的应用程序。向下滚动到名为“DetailsFragment”的类。您将看到此方法:Java 为什么这个方法是静态的?,java,android,class,methods,static,Java,Android,Class,Methods,Static,我正在开发一个以示例为基础的应用程序。向下滚动到名为“DetailsFragment”的类。您将看到此方法: public static DetailsFragment newInstance(int index) { DetailsFragment f = new DetailsFragment(); // Supply index input as an argument. Bundle args = new Bundle(); args.putInt("i
public static DetailsFragment newInstance(int index) {
DetailsFragment f = new DetailsFragment();
// Supply index input as an argument.
Bundle args = new Bundle();
args.putInt("index", index);
f.setArguments(args);
return f;
}
为什么这个方法是静态的?这不能像常规构造函数那样完成吗
public DetailsFragment(int index) {
Bundle args = new Bundle();
args.putInt("index", index);
this.setArguments(args);
}
然后,当您需要该对象时,只需执行以下操作:
DetailsFragment f = new DetailsFragment(somevalue);
我不明白为什么这个方法是静态的
为什么这个方法是静态的?这不能像这样的常规构造函数那样完成吗
基本上,第一种方法是使用静态工厂方法
。在这种情况下,可能没有区别。您可以在构造函数中编写相同的代码。正如@zapl在评论中指出的那样,实际上会有一个特定于Android的问题。如果您提供自己的参数化构造函数,那么编译器不会提供默认构造函数。如注释中所述,每个片段都必须有一个默认构造函数
但是,一般来说,使用静态工厂方法有几个好处。其中包括:
- 您可以使用静态工厂方法实现
- 静态工厂方法可以返回任何子类的实例
关于这个主题,您可以在下面链接的《有效的Java》一书中找到最好的参考资料——第1项
参考资料:
为什么这个方法是静态的?这不能像这样的常规构造函数那样完成吗
基本上,第一种方法是使用静态工厂方法
。在这种情况下,可能没有区别。您可以在构造函数中编写相同的代码。正如@zapl在评论中指出的那样,实际上会有一个特定于Android的问题。如果您提供自己的参数化构造函数,那么编译器不会提供默认构造函数。如注释中所述,每个片段都必须有一个默认构造函数
但是,一般来说,使用静态工厂方法有几个好处。其中包括:
- 您可以使用静态工厂方法实现
- 静态工厂方法可以返回任何子类的实例
关于这个主题,您可以在下面链接的《有效的Java》一书中找到最好的参考资料——第1项
参考资料:
这两种方法在本场景中都是可能的,并且同样好。这两种方法在本场景中都是可能的,并且同样好。我不确定在创建DetailsFragment实例时为什么要创建Bundle对象。我们可以在详细的片段类中将两者分开 我不知道为什么在创建DetailsFragment实例时要创建Bundle的对象。我们可以在详细的片段类中将两者分开 您可以使用DetailsFragment(int-index),并且它只能由您调用。在您的例子中,这没有问题,因为您使用setArguments而不是类vars
为什么使用newInstance是一种模式
如果您的操作系统杀死了您的片段,并且下次将恢复您的片段,则只会调用默认构造函数。操作系统将不会再次调用DetailsFragment(int index)。然而,您设置的参数可能会存储在内存中,尽管您的片段已经被杀死过一次 您可以使用DetailsFragment(int-index),并且它只能由您调用。在您的例子中,这没有问题,因为您使用setArguments而不是类vars
为什么使用newInstance是一种模式
如果您的操作系统杀死了您的片段,并且下次将恢复您的片段,则只会调用默认构造函数。操作系统不会再次调用DetailsFragment(int索引)。然而,您设置的参数可能会存储在内存中,尽管您的片段已经被杀死过一次 相关:相关:还有一个特定于Android的原因:每个片段都必须有一个无参数公共构造函数,这样系统才能(重新)创建它们。@zapl。哦是的,这也是一点。一旦我们显式地提供了一个参数化的构造函数,编译器就不会创建默认构造函数。啊-感谢Rohit和zapl。我知道静力学的一些用途,但我没有意识到这是因为zapl在这个具体案例中所说的。我正在将本例中的DetailsFragment扩展为三个不同的片段,可以插入相应的ActionBarSherlock选项卡。还有一个Android特定的原因:每个片段必须有一个无参数公共构造函数,以便系统可以(重新)创建它们。@zapl。哦是的,这也是一点。一旦我们显式地提供了一个参数化的构造函数,编译器就不会创建默认构造函数。啊-感谢Rohit和zapl。我知道静力学的一些用途,但我没有意识到这是因为zapl在这个具体案例中所说的。我正在将本例中的DetailsFragment扩展为三个不同的片段,可以插入相应的ActionBarSherlock选项卡。抱歉,我编辑并删除了“return this”,然后点击submit:)(对于那些看到这一点的人,我在上面的常规构造函数中有一个return this)抱歉,我编辑并删除了“return this”,在点击提交之前:)(对于那些看到这一点的人,我在上面的常规构造函数中返回了这一点)