【问题标题】:How to check a specific class type exists in the inheritance chain如何检查继承链中是否存在特定的类类型
【发布时间】:2020-06-22 21:20:23
【问题描述】:

我有一个实现装饰器模式的类。我需要检查一个特定的类是否出现在继承链中。通常,我只会使用instanceof

但是,我在开发期间没有类定义。换句话说,我在运行时得到类名(String)。在这种情况下,我如何检查这个给定的类名是否出现在继承链中?

【问题讨论】:

    标签: java reflection decorator


    【解决方案1】:

    首先,听起来很可怕。反射通常是一个非常糟糕的主意。

    编辑:正如@Holger 在 cmets 中指出的那样,动态检查类型层次结构也是一个非常糟糕的主意。 (遗憾的是,不止一种新的语言功能即将推出。哼哼。)更一般地说,保持你的类型层次结构平坦。但这是一锅全新的鱼。根据我的经验,反思通常(并非总是如此,瑞士信贷!)会突出和助长混乱。

    话虽如此:当然,您将需要完全限定的类名(尽管您可以探测一系列包)。从那里,Class.forName 方法将允许您恢复 Class 对象(尽管如果您使用多个类加载器,它可能会变得更加混乱)。那么你只需要Class.isAssignableFrom

    【讨论】:

    • 我不会把反射作为一个坏主意,而是实际的要求,即在不知道 X 或 Y 的情况下,坚持 X 是 Y 的子类型,而不是让 X 满足相关以任何它想要的方式签订合同。
    猜你喜欢
    • 2012-10-09
    • 2012-01-10
    • 2020-08-27
    • 2011-03-06
    • 2023-03-22
    • 1970-01-01
    • 2010-09-12
    • 2016-10-14
    • 2019-06-25
    相关资源
    最近更新 更多