DoArrayList是否需要在修改后的方法中指定为返回类型?

ybzsozfc  于 2021-07-06  发布在  Java
关注(0)|答案(2)|浏览(356)

我想知道返回“更新”的最佳实践是什么 ArrayList ?
例如,如果我正在添加一个新元素,那么无论我是否指定了返回类型(请参阅 addNewA() 以及 addNewB() ),的 ArrayList 在我的 main() 方法仍将“更新”。
是否应该指定返回类型?目前在我的客户端程序中,大多数方法,我都指定为 void (没有返回类型)虽然整个程序仍然按预期工作,但我想我会澄清这一点,并在必要时进行必要的更改。

  1. public class MyClient
  2. {
  3. public static ArrayList<Person> addNewA(ArrayList<Person> myArray)
  4. {
  5. Person jack = new Person("jack", 24);
  6. myArray.add(jack);
  7. return myArray;
  8. }
  9. public static void addNewB(ArrayList<Person> myArray)
  10. {
  11. Person ben= new Person("ben", 19);
  12. myArray.add(ben);
  13. }
  14. public static void main(String[] args)
  15. {
  16. ArrayList<Person> personArray= new ArrayList();
  17. addNewA(personArray); // will return me an array size of 1
  18. addNewB(personArray); // will return me an array size of 2
  19. }
  20. }
rfbsl7qr

rfbsl7qr1#

在这种情况下,您不应该返回列表,而应该创建您的方法 void .
不同的语言有不同的约定,但java的约定之一是,通过修改参数(或调用它们的对象)进行操作的方法不应返回值。返回一个值意味着使用您的代码的人将返回一个不同的对象,否则返回调用者已经拥有的对象是没有用的。一种 void 另一方面,不可能返回一个复制和扩展的列表,因此很明显,它的目的是通过修改您首先给出的列表来进行操作。
(顺便说一下,你也应该 List<Person> ,您应该注意有关使用的警告 new ArrayList() 而不是 new ArrayList<>() .)
1对此有一个特殊的例外,称为fluent builder模式,但它不容易与这样的一般代码混淆。

qlvxas9a

qlvxas9a2#

在java(和大多数高级严格类型语言)中 Object 有人路过 reference 以及经过的原语 value .
当使用 new 关键字创建对象。
而原语(如 int , char , double ect)通过值传递(意味着变量值的副本将被发送到被调用的函数),对象类型通过引用传递,意味着实际的原始对象被传递到函数。
总而言之-既然你在这里使用object( ArrayList ),不需要返回类型,因为原始对象正在更改。

相关问题