关于jdk nio SelectionKey的一些问题
Some questions about jdk nio SelectionKey
最近,我在阅读jdk 1.8 nio 源代码时遇到了问题。我想知道这两个属性之间有什么区别?根据我的查询,有人说publicKeys是对keys的proxy enhancement,但是我发现可以给keys添加元素,但是publicKeys是不可变的,这个应该怎么理解。
public abstract class SelectorImpl extends AbstractSelector {
protected HashSet<SelectionKey> keys = new HashSet();
private Set<SelectionKey> publicKeys;
}
假设您指的是 sun.nio.ch.SelectorImpl
,publicKeys
被声明为私有并在构造函数中按如下方式分配:
publicKeys = Collections.unmodifiableSet(keys)
.
看看 Collections#unmodifiableSet(Set)
我们看到这提供了对其参数的“只读”访问。它的行为不像复制构造函数,即复制元素引用并在调用该方法时提供原始元素的静态视图。相反,它提供了原始的动态 Set
视图,其中所有 Set
修改方法(例如 add
、clear
)都会抛出异常。
最近,我在阅读jdk 1.8 nio 源代码时遇到了问题。我想知道这两个属性之间有什么区别?根据我的查询,有人说publicKeys是对keys的proxy enhancement,但是我发现可以给keys添加元素,但是publicKeys是不可变的,这个应该怎么理解。
public abstract class SelectorImpl extends AbstractSelector {
protected HashSet<SelectionKey> keys = new HashSet();
private Set<SelectionKey> publicKeys;
}
假设您指的是 sun.nio.ch.SelectorImpl
,publicKeys
被声明为私有并在构造函数中按如下方式分配:
publicKeys = Collections.unmodifiableSet(keys)
.
看看 Collections#unmodifiableSet(Set)
我们看到这提供了对其参数的“只读”访问。它的行为不像复制构造函数,即复制元素引用并在调用该方法时提供原始元素的静态视图。相反,它提供了原始的动态 Set
视图,其中所有 Set
修改方法(例如 add
、clear
)都会抛出异常。