繁体   English   中英

如何在`java.util`中扩展package-private类

[英]How to extend package-private class in `java.util`

我想用一个自定义的hashCode/equals实现扩展Collections.UnmodifiableRandomAccessList ,但不要弄乱委托或复制和粘贴实现。 在受信任的代码中,我认为这很容易。 但是,尝试在java.utiljava.util声明新类的尝试给了我SecurityException 有什么办法解决吗?

如果您能够覆盖它,它将为您提供机会编辑状态,这与类的目的(不变性)相矛盾。 Java选择将其包括为包私有的,但在其他实例(如String )中,这些预防措施是使用final来实现的,还可以防止子类化。

[附录]两个hashCode/equals委托给要包装的列表,因此对要包装的列表进行子类化也将更改UnmodifiableRandomAccessList的行为。

HotSpot使用至少三个ClassLoader,它们负责将类加载到JVM中。 系统ClassLoader(用于加载用户代码的系统)拒绝将类加载到某些名称空间中,例如javajava.util (但不能加载,例如, java.nio )。 AFAIK,否则无法说服它。 解决方案是通过-Xbootclasspath/a 此处介绍 -Xbootclasspath/a JVM开关,要求引导类加载器(加载Java基类的加载器)执行此操作

顺便说一句,为了方便地实现委托给另一个实现的List ,请参见Guava的ForwardingList

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM