最近,我在阅读JDK1.8nio源代码时遇到了问题。我想知道这两种属性之间有什么区别?基于我的查询,有人说publicKeys是对密钥的代理增强,但我发现向键添加元素是可能的,但是publicKeys是不可变的,这应该如何理解。
public abstract class SelectorImpl extends AbstractSelector {
protected HashSet<SelectionKey> keys = new HashSet();
private Set<SelectionKey> publicKeys;
}发布于 2021-12-16 09:10:09
假设您是指sun.nio.ch.SelectorImpl,则publicKeys被声明为私有,并在构造函数中分配如下:publicKeys = Collections.unmodifiableSet(keys)。
看看Collections#unmodifiableSet(Set),我们发现它提供了对其参数的“只读”访问。它的行为不像复制构造函数,即复制元素引用,并在调用方法时提供原始元素的静态视图。相反,它提供了原始的动态Set视图,其中所有的Set修改方法(例如add、clear)都抛出一个异常。
https://stackoverflow.com/questions/70376054
复制相似问题