【发布时间】:2013-10-01 02:25:19
【问题描述】:
是否有一种标准技术来“扩展”具有私有构造函数的类,就像大多数 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 标准库中不存在带有自定义比较器的 Set 实现。我想我可以编写自己的哈希集实现,但对于一个简单的情况来说工作量太大了。任何见解都会有所帮助。
【问题讨论】:
-
我很确定这样的类不能扩展。
-
@JakobWeisblat 实际上,它们可以扩展,但只能通过它们的内部类进行扩展,这在这种情况下没有帮助。我知道在我自己的类文件中扩展它们是行不通的。我正在寻找合理的替代方案,特别是看看是否有任何标准做法。找了一会儿也没找到。
-
你不应该重写 equals() 方法,除非你打算遵守它的合同。
-
@scottb 我的覆盖将履行合同。
标签: java multithreading inheritance hash equals