java – 使用私有构造函数扩展类的技术
发布时间:2020-05-24 01:10:26 所属栏目:Java 来源:互联网
导读:是否有一种标准技术来“扩展”具有私有构造函数的类,就像大多数Singleton类一样?具体来说,我正在尝试扩展 java.lang.management.ThreadInfo类,因为我将大量的它们添加到HashSet来控制唯一性.但是,我确定两个线程是否相等的方式是不同的,并且与equals()方法的
|
是否有一种标准技术来“扩展”具有私有构造函数的类,就像大多数Singleton类一样?具体来说,我正在尝试扩展 java.lang.management.ThreadInfo类,因为我将大量的它们添加到HashSet来控制唯一性.但是,我确定两个线程是否相等的方式是不同的,并且与equals()方法的默认实现不同. 在这种情况下,扩展类显然不是一个选项. 制作类似于在构造函数中接受ThreadInfo的包装类,然后使用值手动填充所有相关字段,然后覆盖equals()和hashCode(),或者有更好的方法来执行此操作是否合理? 像我这样的东西就是我开始写的东西,但更好的实现是理想的: class ThreadInfoWrapper {
private ThreadInfo info;
ThreadInfoWrapper(ThreadInfo info) {
this.info = info;
}
//Populate instance variables with Thread.State,thread ID,etc.. with
//Getters/setters and all that other stuff
public boolean equals(Object o) { //Unique implementation
}
public int hashCode() { //Whatever implementation
}
}
但这感觉就像是一种非常迂回的方式来实现一些基本功能.我调查了一下,Java标准库中不存在使用自定义比较器的集合的实现.我想我可以编写自己的哈希集实现,但这对于一个简单的情况来说太过分了.任何见解都会有所帮助. 解决方法通过扩展,您的意思是如何创建派生类,它们使用私有构造函数作为其超类构造函数.你不能,他们是私人的,以防止你这样做.由于JRE课程是由有能力的程序员编写的,因此有充分的理由.因此,即使您可以使用欺骗(例如反射或字节码操作)来解决它,您也不应该这样做.但一切都不会丢失.无论如何,你应该更喜欢组合继承.装饰器和代理设计模式可能很有用(您的示例接近这些). (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
