我希望使用自定义Collections.UnmodifiableRandomAccessList
实现来扩展hashCode/equals
,但不需要委托或复制和粘贴实现。在可靠的代码中,我认为这很容易。但是,我尝试在包java.util
中声明我的新课程给了我一个SecurityException
。有什么方法吗?
答案 0 :(得分:2)
如果你能够覆盖它,它将使你有机会允许编辑状态,这与类的目的(不变性)相矛盾。 Java选择将其作为package-private包含在内,但在其他实例中(如String
),这些预防措施是使用final
实现的,也是为了防止子类化。
[附录]
hashCode/equals
都委托给被包装的列表,因此对要包装的列表进行子类化也会改变UnmodifiableRandomAccessList
的行为。
答案 1 :(得分:2)
HotSpot使用至少三个负责将类加载到JVM中的ClassLoader。系统ClassLoader(加载用户代码的系统)拒绝将类加载到某些名称空间,如java
和java.util
(但不是,例如,java.nio
)。 AFAIK,没有办法说服它。解决方案是通过-Xbootclasspath/a
JVM开关询问引导程序ClassLoader(加载Java基类的程序)来完成它,如文档here所述。
顺便说一句,为了方便地实现委托给另一个实现的List
,请参阅Guava的ForwardingList
。