我有两个课程,比如说Student和Book。
Student.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;
}
}
Book.java
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;
}
}
学生班是我的班级,但书籍班是第三方班 我想在Student类中使用Book并使Student对象成为不可变的? 任何人都可以指导我如何做到这一点吗?
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());
}
}
我必须限制不改变书
我必须使Student对象不可变。一旦使用名称和书籍创建了Student对象,则不应更改SStudent对象。我的意思是如果一些XYZ学生用75页的书创建,那么xyz学生应该是不可变的我的意思是我们不能改变这个学生的书页。
答案 0 :(得分:4)
我看到了两种常见的做法:
示例:
public class MyBook {
private Book book;
public MyBook(...) {
book = new Book(...);
}
public String getTitle() {
return book.getTitle();
}
...etc
}
它可能还取决于用例,换句话说,取决于“为什么”你需要使用Book类而不是创建自己的并转换到其他地方。
答案 1 :(得分:-2)
在getBook()
的Student类中按book.clone()
执行克隆,前提是您的Book
类实现了Cloneable
接口和clone()
方法。