激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|編程技術|正則表達式|C/C++|

服務器之家 - 編程語言 - JAVA教程 - 淺談java中unmodifiableList方法的應用場景

淺談java中unmodifiableList方法的應用場景

2020-11-03 22:40Java教程網 JAVA教程

下面小編就為大家帶來一篇淺談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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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改寫:

?
1
2
3
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方法的應用場景就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持服務器之家。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 91a在线观看 | 黄网站免费观看视频 | 日韩精品久久久久久久电影99爱 | 国产亚洲精品久久久久婷婷瑜伽 | 中文字幕在线播放不卡 | 国产羞羞视频免费在线观看 | 国产精品成人久久 | 精品久久久一二三区播放播放播放视频 | 337p日本欧洲亚洲大胆精蜜臀 | 国产成人高潮免费观看精品 | 久久久日韩精品一区二区三区 | 黄色99视频 | 久久精品小短片 | 成人情欲视频在线看免费 | 国产一区二区三区在线观看视频 | 中文欧美日韩 | 欧美在线 | 亚洲 | 欧美性色大片 | 99国产精品自拍 | 国产精品久久国产精品 | 欧美一级黄 | 免费黄色短视频网站 | 国产午夜精品一区二区三区在线观看 | 草操影院 | 久久精品观看 | 福利在线免费 | 久久99精品久久久久久国产越南 | 久久精品国产99久久6动漫亮点 | 91看片成人 | 国产精品免费观在线 | 一级在线免费观看视频 | 综合网天天射 | 一区二区三区四区高清视频 | 媚药按摩痉挛w中文字幕 | 2021国产精品视频 | 中文字幕免费在线观看视频 | 亚洲网在线观看 | 欧美精品久久久久久久久久 | 日韩精品中文字幕一区 | 嫩嫩的freehdxxx| 校花被肉干高h潮不断 |