首页 > 解决方案 > 如何检查继承链中是否存在特定的类类型

问题描述

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

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

标签: javareflectiondecorator

解决方案


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

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

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


推荐阅读