当前位置: 首页 > 面试题库 >

如何用Java封装数组

锺星洲
2023-03-14
问题内容

我从Java开始,正在学习有关setter,getter和封装的知识。我有一个非常简单的程序,分为两个类:

  • ContainernumArraysetter和getter 有一个私有的int数组()。

  • Main创建一个Container对象并在totalArray方法中使用它。

public class Container {
    private int numArray[]= {0,0,0};
    public int[] getNumArray() {
        return numArray;
    }
    public void setNumArray(int index, int value){
        numArray[index] = value;
    }    
}

public class Main {
    public static void main(String[] args) {
        Container conte = new Container();
        System.out.println(totalArray(conte.getNumArray()));
        conte.getNumArray()[2]++;
        System.out.println(totalArray(conte.getNumArray()));
    }
    private static int totalArray (int v[]){
        int total=0;
        for (int conta =0; conta<v.length;conta++){
            total+=v[conta];
        }
        return total;
    }
}

问题:我可以通过getter更改private
int数组,我知道那是因为getNumArray返回对的引用numArray,而不是数组本身。如果我对数组的单个元素感兴趣,我会用一个索引值来做一个吸气剂,但是我想要方法的整个数组totalArray

我怎样才能防止numArray被他的班级修改?


问题答案:

您可以采取的一切措施来防止他人更改您的数组,而只需在getter中提供它的副本即可。

public int[] getArray() {
    return Arrays.copyOf(numArray, numArray.length);
}

这样,其他方法可以更改其自己的数组副本,但是当他们再次调用getter时,它们将保持原始版本不变。只有setNumArray()您提供的可以实际修改您的内部阵列。

否则,如果要完全阻塞容器,则必须删除数组并使用不可变对象。一些库提供不可变列表,或使用Collections.unmodifiableList。



 类似资料:
  • 我实现了一个名为mobile eCall的类。我从这个类中创建了几个对象,并用来自XML的值填充该对象的String变量,该XML具有针对特定人员的多个mobile eCall。我需要对这个人发出的所有呼叫进行分组和计数(例如,国内呼叫:11分钟;国际呼叫:15分钟;数据:20 MB) 因此,我在类中实现了几个公共方法来检查调用的类型,以返回true或false。在主类中,我调用了这些方法来检查它

  • 上一小节中,我们已经对类和对象有了一个基本的认识。不止于 Java,在各个面向对象语言的书籍资料中,都会提到面向对象的三大特征:封装、继承、多态。本小节我们就从封装开始,探讨面向对象的特征。本小节我们将学习什么是封装、为什么需要封装,最后也会以一个 NBA 球员类的案例来实现封装。 1. 概念和特点 类的基本作用就是封装代码。封装将类的一些特征和行为隐藏在类内部,不允许类外部直接访问。 封装可以被

  • 这是我的actionCreator代码,crud所有的代码都一样,只需要改一个 “getMovies" 这个名字,所以我想要把这个函数封装一下,每次只需要传入一个函数名字就行了。求大佬给封装一下?? 感谢

  • 封装将类的某些信息隐藏在类内部,不允许外部程序直接访问,只能通过该类提供的方法来实现对隐藏信息的操作和访问。例如:一台计算机内部极其复杂,有主板、CPU、硬盘和内存, 而一般用户不需要了解它的内部细节,不需要知道主板的型号、CPU 主频、硬盘和内存的大小,于是计算机制造商将用机箱把计算机封装起来,对外提供了一些接口,如鼠标、键盘和显示器等,这样当用户使用计算机就非常方便。 封装的特点: 只能通过规

  • 我们总是说,如果我们简单地定义变量< code>private并定义getters setters来访问这些变量,那么数据就会被封装。我的问题是,如果我们可以通过getters和setters访问变量(数据),那么数据是如何隐藏或安全的呢? 我在谷歌上搜索了很多解释,但我什么也没找到。每个人都刚刚在他们的博客和帖子中说这是一种数据隐藏技术,但它还没有被解释/详细说明。

  • 关于 axios 二次封装方法的问题 通过 class 创建多个实例 仅通过 axios 创建一个实例 哪种方法更好些呢?或者大家有更好的封装思路吗? 看了一些博客,关于用 class 包装的 axios, 给出来的好处是 不同的服务可以加不同的拦截器,我刚工作不久,不知道有什么场景需要用到这种需求。我更偏向于第二种方法,感觉我接触到的服务,只需要切换一下 baseUrl,并没有别的需求了。