Software Construction Series(2)

Collections.unmodifiable*()与Rep Exposure

JDK在collections接口中提供了一类静态函数:collections.unmodifiable*(),其中*匹配Collections的子类。

如图:

简而言之:这类函数返回一个相应对象的不可更改的Copy。

问题在于不可更改性到那种程度:

1、相当于final?(即reference不可变)

2、相当于imutable?(即集合本身内容不可变,其中元素仍可变)

3、相当于can‘t do anything?(即集合本身不可变,其中元素不可变)

做了如下测试:

package tests;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class list_test {
  List<Pair> list = new ArrayList<>();

  public void add(Pair a) {
    list.add(a);
  }

  public Pair get(int i) {
    return list.get(i);
  }

  public List<Pair> getUnmodified() {
    return Collections.unmodifiableList(list);
  }

  public static void main(String[] args) {
    list_test a = new list_test();

    Pair x = new Pair(1, 1);
    a.add(x);

    List<Pair> u = a.getUnmodified();
    u.get(0).Set(0, 0);
    System.out.println(u.get(0).getX() + "," + u.get(0).getY());
    System.out.println(a.get(0).getX() + "," + a.get(0).getY());

    try {
      u.add(x);
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}

class Pair {
  private int x;
  private int y;

  public Pair(int x, int y) {
    this.x = x;
    this.y = y;
  }

  public void Set(int x, int y) {
    this.x = x;
    this.y = y;
  }

  public int getX() {
    return x;
  }

  public int getY() {
    return y;
  }
}

Output:

0,0
0,0
java.lang.UnsupportedOperationException
    at java.util.Collections$UnmodifiableCollection.add(Collections.java:1055)
    at tests.list_test.main(list_test.java:36)

分析:

unmodifiable的效果为2,相当于imutable(即集合本身内容不可变,其中元素仍可变)。

所以对于要防止数据泄露, 不仅要返回一个unmodifiable的集合对象,还需要其中的元素也是imutable的才行。

原文地址:https://www.cnblogs.com/KarlZhang/p/8697369.html

时间: 2024-10-11 21:08:47

Software Construction Series(2)的相关文章

6-感觉身体被掏空,但还是要学Pandas(上)

关注群主朋友圈的人都知道,本周群主过得RIO充实,每天工作到半夜写爬虫,先后写了Linkedin,生E经.生意参谋以及淘宝关键词搜索结果等爬虫.记得去年写工商信息爬虫时是灰头土脸的,虽然每爬一次随机sleep几秒,但还是频繁被封!对比之下,爬淘宝是相当愉快的,爬爬歇歇是spider基本礼仪,淘宝也回馈我一个process finished with exit code 0.这真是一个好兆头,感觉积攒多年的人品要爆发了! 虽说是劳累的一周,感觉身体被掏空,但还是要打起精神来学Pandas.因为它在

软件工程术语(下)

A B C D E F G H I J K L [M] N O P Q R S T U V W X Y Z  major defect主要缺陷      一个工作产品中所存在的那些严重影响产品功能的正确表现.且若在产品开发周期的后期发现将可能比在产品开发前期发现更加难以改正的故障. management管理      软件工程过程中的核心支持工作流程,其目的在于计划和管理开发项目. marshal反串行化      反串行化 (deserialize) 的同义词. measurement dys

Linux系统管理(二):Linux系统启动流程

Linux系统启动流程 从11月底报名马哥的Linux培训班,12月初真正开始学习,已经过去一个多月的时间了,从学习Linux的发展史开始.跟着学习命令行.文件系统挂载与管理.目录.Bash Shell的基本特性等等,Linux真的是博大精深,今天以CentOS 5,CentOS 6的启动过程进行一下简单的总结.由于才疏学浅,知识所限,有些地方分析不妥之处还请各位高手不吝赐教. 系统启动过程主要经过以下几个流程: POST>BootSequence(BIOS)>Bootloader(MBR)&

7-感觉身体被掏空,但还是要学Pandas(下)

本周群主用了两天时间为浙师大的<旅游大数据分析师--Pandas数据清洗>课程备课,和Pandas来了一次深度亲密接触.现在做梦都是DataFrame变形:stack,unstack,pivot table--对Pandas有了全新的认识:原来它不只是提供类似表格的数据结构DataFrame这么简单,简直就是Excel+SQL的集大成者!而且拥有Python如此优雅的语法,真的可以说是"微言大义","玄之又玄,众妙之门","妙处难与君说&quo

JSP笔记03——环境搭建(转)

不完全翻译,结合谷歌,一定主观性,还可能有误,原始内容地址:https://www.tutorialspoint.com/jsp/jsp_environment_setup.htm [注释]这篇貌似有点旧.最好参考网上的最新教程 开发环境是指你开发.测试.运行程序的地方. 本教程将指导你搭建JSP开发环境,其中包括以下步骤 — 配置Java Development Kit(JDK) 此步骤涉及下载Java Software Development Kit(SDK),以及配置PATH环境变量. 您

CSDN开源夏令营 百度数据可视化实践 ECharts(3)

Echarts  仪表盘 这里主要讲一讲series(仪表盘)的用法,驱动图表生成的数据内容数组,数组中每一项为一个系列的选项及数据 功能丰富,可以做出很漂亮的东西来. (1)首先讲一下仪表盘的基本属性 其中最常用的属性: center 圆心坐标,支持绝对值(px)和百分比,百分比计算min(width,height)*50%,radius 半径大小,支持绝对值(px),百分比计算. radius:半径属性,可以调控半径的大小,支持绝对路径和百分比. (2)全部属性: 名称 默认值 描述 {Ar

关于Highcharts图表组件动态修改属性的方法(API)总结之Series

Highcharts图表组件内的Series很重要,如果说Categries是其大脑,那么Series就是其心脏.这两者才是Highcharts图表组件的重中之重啊.接下来就为大家介绍关于设置Series的相关方法. 一.目录结构 二.API 1.addPoint(添加一个数据点) 参数: options:数据值(①可以是具体的一个Y轴数值,那么X轴坐标系统会随即分配一个:②可以设置一个数组,有着X和Y的数值,如:[xValue,yVlaue] 这样的形式:③可以设置一个Object(对象),详

pandas 的数据结构(Series, DataFrame)

Pandas 讲解 Python Data Analysis Library 或 pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的. Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具. pandas提供了大量能使我们快速便捷地处理数据的函数和方法.你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一. Series:一维数组,与Numpy中的一维array类似. 二者与Python基本的数据结构List也

软件测试技术(五)——Software Review

本周的测试课上进行了一次同行评审的演练,大家讨论的很热烈,不过我也发现了一些不太理解的过程,如如何进行计划活动,走读.技术评审.正规检视是基于什么目的,并应该在何时进行.我做了一下详细的研究. 首先,Peer Review(同行评审)作为Software review的一部分,与之并列的还有Software Management reviews 和 Software audit reviews,三者的大致概念如下: Software peer reviews,由作者及同事去评价技术内容and/o