如何在类复制构造函数(Java OOP)中正确传递数组作为参数

问题描述 投票:0回答:2

我想将一个字符串数组作为参数传递给类的复制构造函数。我想知道在面向对象的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
2个回答
1
投票

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

第三个版本将复制数组两次。那是不必要的。


-1
投票

对象在java中通过引用传递,例如String,Integer,Float等。只有原始类型按值传递,例如int,long,float,double,char等。

你可以做你正在做或正在做的事情;

System.arraycopy(Object src,int srcPos,Object dest,int destPos,int length)更多信息:https://docs.oracle.com/javase/7/docs/api/java/lang/System.html

© www.soinside.com 2019 - 2024. All rights reserved.