java使第三方类不可变
我有两个班,比如学生和书本,如下所示
学生。爪哇
public final class Student {
private final String name;
private final Book book;
public Student(String name, Book book) {
this.name = name;
this.book = book;
}
/**
* @return the name
*/
public String getName() {
return name;
}
/**
* @return the book
*/
public Book getBook() {
return book;
}
}
书。爪哇
public final class Book {
private int pages;
/**
* @return the pages
*/
public int getPages() {
return pages;
}
/**
* @param pages
* the pages to set
*/
public void setPages(int pages) {
this.pages = pages;
}
}
学生班是我的班,而图书班是第三方班
我想在我的学生类中使用Book并使学生对象成为不可变的?
谁能指导我怎么做
public final class Immutable {
public static void main(String[] args) {
Book b = new Book();
b.setPages(35);
Student s = new Student("kiran", b);
System.out.println(s.getBook().getPages());
s.getBook().setPages(56);
System.out.println(s.getBook().getPages());
}
}
我必须限制自己不换这本书
我必须使学生对象不可变。一旦使用name和book创建了学生对象,则不应更改学生对象。我的意思是,如果某个XYZ学生创建了75页的书,那么XYZ学生应该是不可变的,我的意思是我们不能更改这个学生的书页
# 1 楼答案
在学生类的
getBook()
中,通过book.clone()
执行克隆,前提是Book
类实现Cloneable
接口和clone()
方法# 2 楼答案
我看到了两种常见的方法:
例如:
它可能还取决于用例,换句话说,取决于您需要使用该Book类而不是创建自己的类并在其他地方转换的“原因”