加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 使用私有构造函数扩展类的技术

发布时间:2020-12-14 19:36:49 所属栏目: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课程是由有能力的程序员编写的,因此有充分的理由.因此,即使您可以使用欺骗(例如反射或字节码操作)来解决它,您也不应该这样做.

但一切都不会丢失.无论如何,你应该更喜欢组合继承.装饰器和代理设计模式可能很有用(您的示例接近这些).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读