欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2023-12-20 15:21:52
java对象中primitive类型变量可以通过不提供set方法保证不被修改,但对象的list成员在提供get方法后,就可以随意add、remove改变其结构,这不是希望的...

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方法的应用场景就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

上一篇:

下一篇: