Kon*_*Kon 5 java hash inheritance multithreading equals
是否有一种标准技术来"扩展"具有私有构造函数的类,就像大多数Singleton类一样?具体来说,我正在尝试扩展java.lang.management.ThreadInfo
该类,因为我正在添加很多它们HashSet
来控制唯一性.但是,我确定两个线程是否相等的方式是不同的,并且与方法的默认实现不同equals()
.
在这种情况下,扩展类显然不是一个选项.
制作类似于ThreadInfo
在构造函数中接受a的包装类,然后使用值手动填充所有相关字段,然后覆盖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
}
}
Run Code Online (Sandbox Code Playgroud)
但这感觉就像是一种非常迂回的方式来实现一些基本功能.我调查了一下,Java标准库中不存在使用自定义比较器的集合的实现.我想我可以编写自己的哈希集实现,但这对于一个简单的情况来说太过分了.任何见解都会有所帮助.
通过扩展,您的意思是如何创建派生类,派生类使用私有构造函数作为其超类构造函数。你不能,他们被设为私有以防止你这样做。由于 JRE 类是由有能力的程序员编写的,因此这是有充分理由的。因此,即使您可以使用反射或字节码操作等技巧来解决它,您也不应该这样做。
但一切并没有失去。无论如何,你应该更喜欢组合而不是继承。装饰器和代理设计模式可能很有用(您的示例与这些模式很接近)。