gpt4 book ai didi

java - 更改构造函数参数运行时

转载 作者:行者123 更新时间:2023-12-01 09:28:57 25 4
gpt4 key购买 nike

您好,我不知道如何实际查找它,但我很好奇,您可以根据在其构造函数中提供的参数来更改对象吗?就像你有一个对象库,它有一个构造函数公共(public)库( map 书籍)或其他东西。如果我创建 Map...new Hashmap,在其中放入 5 个键值,然后将该映射提供给 Library 的构造函数,则 Library 对象将有一个包含 5 个键值的 HashMap 。如果我在 HashMap 中再插入 2 个键值会发生什么?突然构建的 Library 对象在其映射中是否有 7 个键值,还是仍然只有最初的 5 个键值?

最佳答案

这取决于构造函数的作用。如果构造函数只是将 Map 存储在实例变量中:

public class Library {
private final Map<String, String> books;

public Library(Map<String, String> books) {
this.books = books;
}

public int size() {
return books.size();
}

public static void main(String[] args) {
Map<String, String> myBooks = new HashMap<String,String>();
myBooks.put("Jonathan Swift", "Gullivers Travels");
myBooks.put("Robert Louis Stevenson", "Treasure Island");
myBooks.put("William Shakespeare", "Hamlet");
myBooks.put("J R R Tolkein", "The Hobbit");
myBooks.put("Mary Shelley", "Frankenstein");
Library library = new Library(myBooks);
myBooks.put("J K Rowling", "Harry Potter and the Philosophers stone");
System.out.println("Library contains" + library.size() + " books");
}
}

然后,库包含对传递给它的 map 的引用,并且它将看到对该 map 内容的任何更改。上面的代码应该打印出图书馆里有 6 本书。

另一方面,如果构造函数创建映射的副本:

public class Library {
private final Map<String, String> books;

public Library(Map<String, String> books) {
this.books = new HashMap<String, String>(books);
}

public int size() {
return books.size();
}

public static void main(String[] args) {
Map<String, String> myBooks = new HashMap<String,String>();
myBooks.put("Jonathan Swift", "Gullivers Travels");
myBooks.put("Robert Louis Stevenson", "Treasure Island");
myBooks.put("William Shakespeare", "Hamlet");
myBooks.put("J R R Tolkein", "The Hobbit");
myBooks.put("Mary Shelley", "Frankenstein");
Library library = new Library(myBooks);
myBooks.put("J K Rowling", "Harry Potter and the Philosophers stone");
System.out.println("Library contains" + library.size() + " books");
}
}

那么图书馆有自己的 map 副本,并且不会看到对原始 map 的任何更改,因此上面的代码应该打印图书馆中有 5 本书。

关于java - 更改构造函数参数运行时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39609118/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com