我正在android
用java创建一个应用程序,我总是用以下方式实例化一个类:
Pedido pedido = new Pedido();
pedido.setCantidad(1); // aqui le asigno los valores
但我发现有时它是通过构造函数完成的:
Pedido pedido = new Pedido(1);
这两种形式中的哪一种是最优的或标准的?它没有给我一个具体的错误,但如果我使用第二种方式,我就不能再使用第一种了。
我正在android
用java创建一个应用程序,我总是用以下方式实例化一个类:
Pedido pedido = new Pedido();
pedido.setCantidad(1); // aqui le asigno los valores
但我发现有时它是通过构造函数完成的:
Pedido pedido = new Pedido(1);
这两种形式中的哪一种是最优的或标准的?它没有给我一个具体的错误,但如果我使用第二种方式,我就不能再使用第一种了。
首先,Java 特有的东西。
我们所有的类都有一个默认构造函数,没有参数。这就是为什么你可以这样做:
现在,当您创建一个或多个参数化构造函数时,此默认构造函数会丢失,为了使用它,您必须在类中显式声明它。对于您的示例,它将是这样的:
通过这种方式,您已经可以使用两者中的任何一个(您甚至可以拥有更多)。
现在,对于您的具体问题,我想到了以下内容。必要的属性应该在构造函数中,以便对象在实例化时可以正常工作。想象一下,我将使用您的 Order 类。我不必知道它在内部是如何工作的,我应该只对您在类中公开的公共 API(公共方法)感兴趣。它不应该对对象初始化一无所知。因此,特别是对于请求,可以使用两个构造函数中的任何一个。
没有“最佳”、“标准”或“正确”的方式。这完全取决于上下文或您的要求。
也许您正在建模的业务在创建订单时不需要指明数量(或任何其他属性)。在这种情况下,您可以使用默认构造函数或不使用参数,并且当您需要定义属性的值时,将其传递给实例。
我们必须记住,如果我们有在实例化类时必须默认使用的值,我们可以使用相同的模式,因为这些值要么在类字段的声明中定义,要么在构造函数的主体..
另一方面,如果我们的业务告诉我们每次创建订单时,都必须为其分配一系列值,这些值可能因每个订单而异(例如),那么可能更正确的是定义一个接收这些值的构造函数。
在软件开发的世界中,我们几乎总是有几种选择或做事方式,但最好的选择总是取决于我们的具体情况。有时最适合 X 的东西,却不是另一个。
两种形式都是正确的。它的使用取决于您要解决的问题。
假设该类
Pedido
定义如下:使用该类时,按如下方式完成:
这里正在实例化一个类,但仍隐式执行构造函数(我们看不到它,但编译器负责将其分配给该类)。
但是,如果我们向它添加一个具有重载的构造函数呢?
如果我们碰巧重载了一个构造函数,我们可以通过两种方式实例化它。
所以我们的课程是:
使用该类的方法是:
上面的代码可以编译,因为该类有两个重载的构造函数,否则如果它只有一个,它就会编译。