【问题标题】:How to properly pass an array as a parameter in a class copy constructor (Java OOP)如何在类复制构造函数(Java OOP)中正确地将数组作为参数传递
【发布时间】:2019-08-21 22:23:12
【问题描述】:

我想在类的复制构造函数中传递一个字符串数组作为参数。我想知道在面向对象的 Java 编程设置中,这些方式中的哪一种是正确/常用的方式:

-在复制构造函数中复制数组 - 在被复制对象的“getArray”方法中复制数组 -以上两种

我的目标是通过值而不是通过引用来复制数组以保持封装。

    String[] apps;

    // First version
    public Smartphone(Smartphone p)
    {
        this.apps = Arrays.copyOf(p.getApps(), p.getApps().length);
    }
    public String[] getApps()
    {
        return apps;
    }

    // Second version
    public Smartphone(Smartphone p)
    {
        this.apps = p.getApps();
    }
    public String[] getApps()
    {
        return Arrays.copyOf(apps, apps.length);
    }

    // Third version
    public Smartphone(Smartphone p)
    {
        this.apps = Arrays.copyOf(p.getApps(), p.getApps().length);
    }
    public String[] getApps()
    {
        return Arrays.copyOf(apps, apps.length);
    } 

【问题讨论】:

    标签: java arrays oop constructor encapsulation


    【解决方案1】:

    第二个版本是正确的。构造函数调用p.getApps(),它返回一个复制的数组。

    第三个版本会复制数组两次。没必要。

    【讨论】:

      【解决方案2】:

      对象在 java 中通过引用传递,例如字符串、整数、浮点数等 只有原始类型通过值传递,例如int、long、float、double、char 等。

      你可以做你正在做的事情,或者使用;

      System.arraycopy(Object src, int srcPos, 对象目的地, int destPos, 整数长度) 更多信息: https://docs.oracle.com/javase/7/docs/api/java/lang/System.html

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多