最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺談java中unmodifiableList方法的應(yīng)用場(chǎng)景

 更新時(shí)間:2017年06月01日 07:56:16   投稿:jingxian  
下面小編就為大家?guī)?lái)一篇淺談java中unmodifiableList方法的應(yīng)用場(chǎng)景。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

java對(duì)象中primitive類型變量可以通過(guò)不提供set方法保證不被修改,但對(duì)象的List成員在提供get方法后,就可以隨意add、remove改變其結(jié)構(gòu),這不是希望的結(jié)果。網(wǎng)上看了下,發(fā)現(xiàn)Collections的靜態(tài)方法unmodifiableList可以達(dá)到目的。方法原型為:public static <T> List<T> unmodifiableList(List<? extends T> list);用法也很簡(jiǎn)單,傳入一個(gè)List實(shí)例la,返回這個(gè)list的只讀視圖lb,類型依然是List。之后對(duì)lb進(jìn)行add、remove等改變其內(nèi)容的操作將導(dǎo)致編譯不通過(guò)。

首先舉例描述問(wèn)題:

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();

  }
}

執(zhí)行結(jié)果:

Alice

18

Math

Chinese

Alice

18

Math

Chinese

English

雖然只有g(shù)etCourse,但依然可以被加上1門English。使用unmodifiableList可以解決這個(gè)問(wèn)題,將Student的getCourses改寫:

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

再次執(zhí)行,編譯器提示出錯(cuò):

Exception in thread "main" java.lang.UnsupportedOperationException

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

總結(jié),使用unmodifiableList可以保證對(duì)象的list內(nèi)容不被意料之外地修改,保證對(duì)象的封裝性。

以上這篇淺談java中unmodifiableList方法的應(yīng)用場(chǎng)景就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 關(guān)于Android觸摸事件分發(fā)的原理詳析

    關(guān)于Android觸摸事件分發(fā)的原理詳析

    觸摸事件分發(fā)機(jī)制一直以來(lái)都是Android中比較重要的一大塊,自定義view,各種復(fù)雜的自定義手勢(shì)交互都與觸摸事件分發(fā)機(jī)制關(guān)系密,下面這篇文章主要給大家介紹了關(guān)于Android觸摸事件分發(fā)原理的相關(guān)資料,需要的朋友可以參考下
    2022-01-01
  • java http連接池的實(shí)現(xiàn)方式(帶有失敗重試等高級(jí)功能)

    java http連接池的實(shí)現(xiàn)方式(帶有失敗重試等高級(jí)功能)

    這篇文章主要介紹了java http連接池的實(shí)現(xiàn)方式(帶有失敗重試等高級(jí)功能),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • 一文掌握IDEA中的Maven集成與創(chuàng)建

    一文掌握IDEA中的Maven集成與創(chuàng)建

    maven是用來(lái)幫助我們快速搭建項(xiàng)目結(jié)構(gòu)與開發(fā)環(huán)境的好工具,這篇文章主要介紹了一文掌握IDEA中的Maven集成與創(chuàng)建,需要的朋友可以參考下
    2023-02-02
  • SpringDataJPA原生sql查詢方式的封裝操作

    SpringDataJPA原生sql查詢方式的封裝操作

    這篇文章主要介紹了SpringDataJPA原生sql查詢方式的封裝操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Java中Object類常用的12個(gè)方法(小結(jié))

    Java中Object類常用的12個(gè)方法(小結(jié))

    Java 中的 Object 方法在面試中是一個(gè)非常高頻的點(diǎn),本文主要介紹了Java中Object類常用的12個(gè)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • 深入學(xué)習(xí)SpringCloud之SpringCloud簡(jiǎn)介

    深入學(xué)習(xí)SpringCloud之SpringCloud簡(jiǎn)介

    Spring Cloud是一個(gè)一站式的開發(fā)分布式系統(tǒng)的框架,為開發(fā)者提供了一系列的構(gòu)建分布式系統(tǒng)的工具集,本文給大家介紹springcloud的相關(guān)知識(shí),感興趣的朋友跟隨一起看看吧
    2021-04-04
  • Java中Dijkstra算法求解最短路徑的實(shí)現(xiàn)

    Java中Dijkstra算法求解最短路徑的實(shí)現(xiàn)

    Dijkstra算法是一種解決最短路徑問(wèn)題的常用算法,本文主要介紹了Java中Dijkstra算法求解最短路徑的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-09-09
  • 重試框架Guava-Retry和spring-Retry的使用示例

    重試框架Guava-Retry和spring-Retry的使用示例

    spring-retry 和 guava-retry 工具都是線程安全的重試,能夠支持并發(fā)業(yè)務(wù)場(chǎng)景的重試邏輯正確性,本文主要介紹了重試框架Guava-Retry和spring-Retry的使用示例,感興趣的可以一下
    2023-09-09
  • Maven添加Tomcat插件實(shí)現(xiàn)熱部署代碼實(shí)例

    Maven添加Tomcat插件實(shí)現(xiàn)熱部署代碼實(shí)例

    這篇文章主要介紹了Maven添加Tomcat插件實(shí)現(xiàn)熱部署代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • vscode快速引入第三方j(luò)ar包發(fā)QQ郵件

    vscode快速引入第三方j(luò)ar包發(fā)QQ郵件

    這篇文章主要介紹了vscode快速引入第三方j(luò)ar包發(fā)QQ郵件,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06

最新評(píng)論

卫辉市| 广南县| 龙游县| 岗巴县| 张掖市| 阿鲁科尔沁旗| 利辛县| 城口县| 黄陵县| 昭平县| 常宁市| 长垣县| 东台市| 秀山| 皋兰县| 江达县| 象州县| 讷河市| 沾益县| 东阿县| 保山市| 高雄市| 盐津县| 昌吉市| 临邑县| 大渡口区| 商城县| 汝南县| 冕宁县| 酉阳| 富民县| 大厂| 哈巴河县| 宁远县| 鸡西市| 法库县| 湟中县| 安新县| 客服| 高雄县| 安阳市|