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