java中のunmodifiable List方法の応用シーンを話します。


javaオブジェクト中のprmitiveタイプ変数は、set方法を提供しないことによって修正されないことを保証することができますが、オブジェクトのListメンバーはget方法を提供した後、任意のadd、removeで構造を変更することができます。これは希望の結果ではありません。ネットで見たら、Collectionの静的方法unmodifiable Listが目的を達成できることが分かりました。方法の原型は、public static<T>List<T>unmodifiables List(List<?extens 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);
    }
  }


}
アプリ.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();

  }
}
実行結果:
アリス
18
Math
Chinese
アリス
18
Math
Chinese
English
get Courseだけですが、一つのEnglishを追加できます。unmodifiables Listを使ってこの問題を解決できます。Studentのget Coursesを書き換えます。

public List<String> getCourses(){
    return Collections.unmodifiableList(this.courses);
  }
再度実行します。コンパイラのヒントが間違っています。
Exception in thread「main」java.lang.Unipported Operation Exception
at java.util.ollections$Unimodifiable Collection.add(Collection s.java:1055)
まとめて、unmodifiable Listを使用して、対象のlistコンテンツが予想外に修正されないことを保証し、対象のパッケージ性を保証します。
以上のように、javaにおけるunmodifiable Listメソッドの応用シーンは、小編集が皆さんに共有しているすべての内容です。参考にしていただきたいです。どうぞよろしくお願いします。