Java反射中通过Object获取Class对应类成员的问题
Java反射:从Class实例对象获取目标类信息
当你把MyThing.class赋值给Object类型变量后,调用obj.getClass()得到的是java.lang.Class的Class对象——这是因为MyThing.class本身就是Class<MyThing>的实例,它的运行时类型就是Class,所以反射拿到的自然是Class类的成员。
要获取对应的MyThing类,直接把这个Object强制转换为Class类型即可,具体实现如下:
- 安全类型转换(避免异常)
先用instanceof判断当前Object是否为Class实例,再做转换:
if (obj instanceof Class) { Class<?> targetClass = (Class<?>) obj; // 现在targetClass就是MyThing对应的Class对象,可正常调用反射API Field[] declaredFields = targetClass.getDeclaredFields(); Method[] declaredMethods = targetClass.getDeclaredMethods(); // 筛选带@Publish注解的成员... }
- 兼容类实例与Class对象的通用逻辑
如果你的工具类需要同时支持传入类实例和Class对象,可以在方法里加分支判断:
public void processPublishedMembers(Object obj) { Class<?> targetClass; // 区分传入的是Class对象还是类实例 if (obj instanceof Class) { targetClass = (Class<?>) obj; } else { targetClass = obj.getClass(); } // 统一查找带@Publish注解的字段 for (Field field : targetClass.getDeclaredFields()) { if (field.isAnnotationPresent(Publish.class)) { // 自定义处理逻辑 } } // 统一查找带@Publish注解的方法 for (Method method : targetClass.getDeclaredMethods()) { if (method.isAnnotationPresent(Publish.class)) { // 自定义处理逻辑 } } }
核心说明
MyThing.class本身就是代表MyThing类的Class实例,不需要额外的"获取"方法,只需要把Object类型的引用转回Class类型,就能直接拿到目标类的元数据。
内容的提问来源于stack exchange,提问作者sventuba
相关产品推荐
相关产品推荐

