【发布时间】:2020-06-22 21:20:23
【问题描述】:
我有一个实现装饰器模式的类。我需要检查一个特定的类是否出现在继承链中。通常,我只会使用instanceof。
但是,我在开发期间没有类定义。换句话说,我在运行时得到类名(String)。在这种情况下,我如何检查这个给定的类名是否出现在继承链中?
【问题讨论】:
标签: java reflection decorator
我有一个实现装饰器模式的类。我需要检查一个特定的类是否出现在继承链中。通常,我只会使用instanceof。
但是,我在开发期间没有类定义。换句话说,我在运行时得到类名(String)。在这种情况下,我如何检查这个给定的类名是否出现在继承链中?
【问题讨论】:
标签: java reflection decorator
首先,听起来很可怕。反射通常是一个非常糟糕的主意。
编辑:正如@Holger 在 cmets 中指出的那样,动态检查类型层次结构也是一个非常糟糕的主意。 (遗憾的是,不止一种新的语言功能即将推出。哼哼。)更一般地说,保持你的类型层次结构平坦。但这是一锅全新的鱼。根据我的经验,反思通常(并非总是如此,瑞士信贷!)会突出和助长混乱。
话虽如此:当然,您将需要完全限定的类名(尽管您可以探测一系列包)。从那里,Class.forName 方法将允许您恢复 Class 对象(尽管如果您使用多个类加载器,它可能会变得更加混乱)。那么你只需要Class.isAssignableFrom。
【讨论】: