java - 如何检查继承链中是否存在特定的类类型
问题描述
我有一个实现装饰器模式的类。我需要检查一个特定的类是否出现在继承链中。通常,我只会使用instanceof
.
但是,我在开发期间没有类定义。换句话说,我String
在运行时获得了类名(作为 a )。在这种情况下,我如何检查这个给定的类名是否出现在继承链中?
解决方案
首先,听起来很可怕。反思通常是一个非常糟糕的主意。
编辑:正如@Holger 在评论中指出的那样,类型层次结构的动态检查也是一个非常糟糕的主意。(遗憾的是,不止一种新的语言特性即将推出。哼哼。)更一般地说,保持你的类型层次结构平坦。但这是一锅全新的鱼。以我的经验,它通常(并非总是,瑞士信贷!)突出和促进混乱的反思。
话虽如此:当然,您将需要完全限定的类名(尽管您可以探测一系列包)。从那里,Class.forName
方法将允许您恢复Class
对象(尽管如果您使用多个类加载器,它可能会变得更加混乱)。那么你只需要Class.isAssignableFrom
.
推荐阅读
- azure-devops - 在 Azure DevOps 上构建管道时分离的 Head
- android - 如何使用 Retrofit 在 android 中调用图像上传 Web 服务 (ASP.NET) .asmx 文件
- python - 对列的重复值进行排序、分组和显示
- c# - 当前上下文中不存在名称“权限”
- botframework - 如何在 Node.js 中为在网络代理后面运行的机器人正确设置代理
- javascript - 在 NestJS 微服务中公开普通的 http 端点
- python - float.__str__ 在 python 2 和 3 中的行为不同?
- python - 将文本从一个文件传输到另一个文件
- reactjs - react中子组件的渲染与react native不同吗?
- r - 为什么 R 不能读取这个 CSV 文件?