我看到了下一节课:
public static class DetailsFragment extends Fragment {
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;
}
}
我不明白的是为什么即使您只是定义 DetailsFragment 是什么,您也可以返回 DetailsFragment 类型。对我(新手)来说,这就像在字典中搜索一个词,而定义使用这个词本身来定义它。
请解释。提前致谢。
该static
修改的newInstance
方法是关键。该修饰符将方法定义为独立的,只需代码自行运行,而不是定义属于对象(实例)的行为。
静态方法是爪哇的部分中的一个不 面向对象的。长话短说,有时只运行一段代码而不将其绑定到对象是很方便的。
如果您遵循常见的 Java 命名约定,其中一个类以首字母大写字符命名,而该类的实例以首字母小写字母命名,那么您可以轻松发现静态方法的调用。
DetailsFragment.newInstance() // A static method call made on a class. Not object-oriented.
detailsFragment.someMethod() // Instance method, invoked on one instance (one object) of type DetailsFragment named 'detailsFragment'.
所以你的newInstance
方法不是构造函数方法。它就像一个构造函数方法,因为它旨在创建一个对象。这种方法有时被称为工厂方法。
你的思路是对的。调用new
同一个类的构造函数会导致无限循环的对象创建一个对象,然后再创建一个对象,依此类推,直到您的应用程序执行失败。这种对自身的重复调用称为递归。如果不受控制,递归很糟糕,会导致您的应用程序失败。工厂方法上的递归也同样糟糕,无休止地运行直到失败。
但是这里我们有一个工厂方法通过调用来调用构造函数new
。因此,没有不受控制的递归,根本没有递归。
如果您对这些概念不熟悉,那么围绕它们进行思考可能会很棘手。对我来说,关键是当我的眼睛接触到任何static
修饰符的使用时,我认为“不是面向对象的”,并将我的大脑从 OOP 模式中转移出来,转而用简单的程序代码进行思考。
从视觉上看,我认为一个类是一个饼干切割器,对象/实例是正在生产的饼干,而静态方法是一个用绳子绑在饼干切割器上的注释。那个静态方法确实与类无关,但是将它绑定到一个类给了我们一个可以保存的地方,一种让我们以后查找和调用该方法的方法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句