当前位置: 移动技术网 > IT编程>开发语言>Java > 浅谈java中unmodifiableList方法的应用场景

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

2019年07月22日  | 移动技术网IT编程  | 我要评论

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网