gpt4 book ai didi

java - 使用私有(private)构造函数扩展类的技术

转载 作者:搜寻专家 更新时间:2023-10-31 20:20:55 25 4
gpt4 key购买 nike

是否有一种标准技术可以像大多数单例类一样使用私有(private)构造函数“扩展”类?具体来说,我正在尝试扩展 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 标准库中不存在带有自定义比较器的 Sets 实现。我想我可以编写自己的哈希集实现,但对于一个简单的情况来说,这工作量太大了。任何见解都会有所帮助。

最佳答案

扩展是指如何创建派生类,这些派生类使用私有(private)构造函数作为它们的父类(super class)构造函数。你不能,他们被保密以防止你这样做。由于 JRE 类是由有能力的程序员编写的,因此这是有充分理由的。因此,即使您可以使用技巧(例如反射或字节码操作)来解决它,您也不应该这样做。

但一切并没有丢失。无论如何,您应该更喜欢组合而不是继承。 Decorator 和 Proxy 设计模式可能很有用(您的示例与这些模式很接近)。

关于java - 使用私有(private)构造函数扩展类的技术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19106976/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com