为什么可以声明一个方法来返回正在创建的同一类的类型?

卢西亚诺·法尔科

我看到了下一节课:

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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

一个类可以使用__init__方法来创建同一类的其他实例吗?

来自分类Dev

为什么要将一个类的线程函数设为静态以便在同一类中可以访问?

来自分类Dev

如何定义一个泛型方法来返回派生类类型的实例?

来自分类Dev

是否可以在同一类中创建一个类的实例?

来自分类Dev

你可以给一个方法一个属性,该属性是由pygame中同一类中的另一个方法创建的吗?

来自分类Dev

如何模拟正在测试的同一类中的另一个方法?

来自分类Dev

如何模拟正在测试的同一类中的另一个方法?

来自分类Dev

如何通过一个类和方法来创建一个类的实例?

来自分类Dev

为什么我可以定义一个静态常量,该静态常量依赖于同一类型的另一个静态常量,而不是属性?

来自分类Dev

C ++在同一类的方法中返回对象的类型

来自分类Dev

java创建一个类的方法来调用另一个类的方法

来自分类Dev

将方法的返回值作为参数传递给同一类中的另一个方法

来自分类Dev

为什么在C ++中可以将一个类的指针强制转换为另一类的指针?

来自分类Dev

为什么在C ++中可以将一个类的指针强制转换为另一类的指针?

来自分类Dev

创建一个方法来设置对象的数据

来自分类Dev

当方法在同一个类中定义时,为什么会使用未声明的标识符“downloadDataFromURL”?

来自分类Dev

为什么是两个使用条款解析为视为GCC ambigious同一类型

来自分类Dev

为什么一个项目类中的方法不能识别另一类中的方法?

来自分类Dev

有没有一种方法可以在Java中创建一个方法来获取有关单击了什么JPanel的信息/信息?

来自分类Dev

为什么类模板中的成员函数在同一个地址创建同一个对象

来自分类Dev

如何用每个对象的类的返回类型声明一个类型间方法?

来自分类Dev

在python的同一类中的另一个方法中调用一个类的方法

来自分类Dev

同一类函数的多个定义取决于同一个继承类的多种类型?

来自分类Dev

为什么运算符的操作数必须是同一类型?

来自分类Dev

从同一类中的另一个方法调用方法时出错

来自分类Dev

我可以从一个方法返回多个值而不为返回类型或 OUT 参数创建一个类吗?

来自分类Dev

声明同一类的多个对象?

来自分类Dev

是否可以创建一个类方法,该方法将根据给定条件返回一个数组或什么都不返回?

来自分类Dev

为什么我可以声明一个变量的数据类型两次?

Related 相关文章

  1. 1

    一个类可以使用__init__方法来创建同一类的其他实例吗?

  2. 2

    为什么要将一个类的线程函数设为静态以便在同一类中可以访问?

  3. 3

    如何定义一个泛型方法来返回派生类类型的实例?

  4. 4

    是否可以在同一类中创建一个类的实例?

  5. 5

    你可以给一个方法一个属性,该属性是由pygame中同一类中的另一个方法创建的吗?

  6. 6

    如何模拟正在测试的同一类中的另一个方法?

  7. 7

    如何模拟正在测试的同一类中的另一个方法?

  8. 8

    如何通过一个类和方法来创建一个类的实例?

  9. 9

    为什么我可以定义一个静态常量,该静态常量依赖于同一类型的另一个静态常量,而不是属性?

  10. 10

    C ++在同一类的方法中返回对象的类型

  11. 11

    java创建一个类的方法来调用另一个类的方法

  12. 12

    将方法的返回值作为参数传递给同一类中的另一个方法

  13. 13

    为什么在C ++中可以将一个类的指针强制转换为另一类的指针?

  14. 14

    为什么在C ++中可以将一个类的指针强制转换为另一类的指针?

  15. 15

    创建一个方法来设置对象的数据

  16. 16

    当方法在同一个类中定义时,为什么会使用未声明的标识符“downloadDataFromURL”?

  17. 17

    为什么是两个使用条款解析为视为GCC ambigious同一类型

  18. 18

    为什么一个项目类中的方法不能识别另一类中的方法?

  19. 19

    有没有一种方法可以在Java中创建一个方法来获取有关单击了什么JPanel的信息/信息?

  20. 20

    为什么类模板中的成员函数在同一个地址创建同一个对象

  21. 21

    如何用每个对象的类的返回类型声明一个类型间方法?

  22. 22

    在python的同一类中的另一个方法中调用一个类的方法

  23. 23

    同一类函数的多个定义取决于同一个继承类的多种类型?

  24. 24

    为什么运算符的操作数必须是同一类型?

  25. 25

    从同一类中的另一个方法调用方法时出错

  26. 26

    我可以从一个方法返回多个值而不为返回类型或 OUT 参数创建一个类吗?

  27. 27

    声明同一类的多个对象?

  28. 28

    是否可以创建一个类方法,该方法将根据给定条件返回一个数组或什么都不返回?

  29. 29

    为什么我可以声明一个变量的数据类型两次?

热门标签

归档