全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

浅谈java中unmodifiableList方法的应用场景

java对象中primitive类型变量可以通过不提供set方法保证不被修改,但对象的List成员在提供get方法后,就可以随意add、remove改变其结构,这不是希望的结果。网上看了下,发现Collections的静态方法unmodifiableList可以达到目的。方法原型为:public static <T> List<T> unmodifiableList(List<? extends T> list);用法也很简单,传入一个List实例la,返回这个list的只读视图lb,类型依然是List。之后对lb进行add、remove等改变其内容的操作将导致编译不通过。

首先举例描述问题:

Student.java

package com.liulei.test;

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

/**
 * Created by Liulei on 2017/5/31.
 */
public class Student {
  private String name;
  private int age;
  private List<String> courses;

  public Student(){
    courses = new ArrayList<String>();
  }
  public Student(String name,int age,List<String> courses){
    this.name = name;
    this.age = age;
    this.courses = courses;
  }

  public List<String> getCourses(){
    return this.courses;
  }

  public void setName(String name) {
    this.name = name;
  }

  public void setAge(int age) {
    this.age = age;
  }

  public String getName() {
    return name;
  }

  public int getAge() {
    return age;
  }

  public void describe(){
    System.out.println(this.name);
    System.out.println(this.age);
    for (String course:courses){
      System.out.println(course);
    }
  }


}

App.java

package com.liulei.test;

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

/**
 * Hello world!
 *
 */
public class App
{
  public static void main( String[] args )
  {
    ArrayList<String> courses = new ArrayList<String>();
    courses.add("Math");
    courses.add("Chinese");

    Student student = new Student("Alice",18,courses);
    student.describe();
    List<String> myCourses = student.getCourses();
    myCourses.add("English");
    student.describe();

  }
}

执行结果:

Alice

18

Math

Chinese

Alice

18

Math

Chinese

English

虽然只有getCourse,但依然可以被加上1门English。使用unmodifiableList可以解决这个问题,将Student的getCourses改写:

public List<String> getCourses(){
    return Collections.unmodifiableList(this.courses);
  }

再次执行,编译器提示出错:

Exception in thread "main" java.lang.UnsupportedOperationException

at java.util.Collections$UnmodifiableCollection.add(Collections.java:1055)

总结,使用unmodifiableList可以保证对象的list内容不被意料之外地修改,保证对象的封装性。

以上这篇浅谈java中unmodifiableList方法的应用场景就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。


# java  # unmodifiableList  # 应用场景  # 详解Java动态代理的实现及应用  # 基于Protobuf动态解析在Java中的应用 包含例子程序  # 正则表达式中环视的简单应用示例【基于java】  # java.lang.UnsatisfiedLinkError: %1 不是有效的Win32应用程序错  # JAVA多线程并发下的单例模式应用  # java应用领域分析  # 给大家  # 不被  # 看了  # 也很  # 可以通过  # 希望能  # 这不是  # 这篇  # 意料之外  # 浅谈  # 可以达到  # 小编  # 解决这个问题  # 大家多多  # 就可以  # 象中  # 不通过  # 网上  # style  # color 


相关文章: 如何选择靠谱的建站公司加盟品牌?  如何在建站宝盒中设置产品搜索功能?  微课制作网站有哪些,微课网怎么进?  建站之星代理如何获取技术支持?  c# Task.Yield 的作用是什么 它和Task.Delay(1)有区别吗  微网站制作教程,不会写代码,不会编程,怎么样建自己的网站?  宝盒自助建站智能生成技巧:SEO优化与关键词设置指南  Swift中swift中的switch 语句  建站之星如何修改网站生成路径?  无锡营销型网站制作公司,无锡网选车牌流程?  如何在Golang中使用replace替换模块_指定本地或远程路径  建站之星如何一键生成手机站?  宿州网站制作公司兴策,安徽省低保查询网站?  已有域名和空间如何搭建网站?  高端建站如何打造兼具美学与转化的品牌官网?  网站专业制作公司,网站编辑是做什么的?好做吗?工作前景如何?  专业商城网站制作公司有哪些,pi商城官网是哪个?  常州自助建站费用包含哪些项目?  网站视频怎么制作,哪个网站可以免费收看好莱坞经典大片?  存储型VPS适合搭建中小型网站吗?  早安海报制作网站推荐大全,企业早安海报怎么每天更换?  如何选择适合PHP云建站的开源框架?  建站主机选虚拟主机还是云服务器更好?  微信小程序 五星评分(包括半颗星评分)实例代码  如何在IIS中新建站点并配置端口与物理路径?  微信h5制作网站有哪些,免费微信H5页面制作工具?  b2c电商网站制作流程,b2c水平综合的电商平台?  如何确认建站备案号应放置的具体位置?  如何构建满足综合性能需求的优质建站方案?  ppt在线制作免费网站推荐,有什么下载免费的ppt模板网站?  建站之星北京办公室:智能建站系统与小程序生成方案解析  如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?  如何快速打造个性化非模板自助建站?  小捣蛋自助建站系统:数据分析与安全设置双核驱动网站优化  桂林网站制作公司有哪些,桂林马拉松怎么报名?  专业网站制作服务公司,有哪些网站可以免费发布招聘信息?  网站制作哪家好,cc、.co、.cm哪个域名更适合做网站?  开心动漫网站制作软件下载,十分开心动画为何停播?  上海网站制作网站建设公司,建筑电工证网上查询系统入口?  标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?  建站中国官网:模板定制+SEO优化+建站流程一站式指南  网站制作和推广的区别,想自己建立一个网站做推广,有什么快捷方法马上做好一个网站?  如何通过IIS搭建网站并配置访问权限?  h5网站制作工具有哪些,h5页面制作工具有哪些?  建站主机选购指南:核心配置与性价比推荐解析  如何快速搭建个人网站并优化SEO?  免费ppt制作网站,有没有值得推荐的免费PPT网站?  交易网站制作流程,我想开通一个网站,注册一个交易网址,需要那些手续?  如何规划企业建站流程的关键步骤?  ,有什么在线背英语单词效率比较高的网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。