Java反射之获取类的标识符
来源:互联网 发布:面对网络舆论你怎么看 编辑:程序博客网 时间:2024/06/03 17:51
上一篇文章讲了如果获得一个类的类名,有没有什么办法可以获取到类的访问权限、是否是接口、是否是static类,是否final标识、是否strictfg标识等,获取类的注解等。
答案是肯定的。
访问权限、接口标识、static标识,final标识、strictfp标识等这些都是标识Class的标识符。
可以通过Class.getModifiers()获取,然后自己做遍历判断。
Class.getAnnotations()是获取Class的注解的方式。
更多的Class方法可以参考官方文档。
贴一个官方的例子:
import java.lang.annotation.Annotation;import java.lang.reflect.Modifier;import java.lang.reflect.Type;import java.lang.reflect.TypeVariable;import java.util.Arrays;import java.util.ArrayList;import java.util.List;import static java.lang.System.out;public class ClassDeclarationSpy { public static void main(String... args) { try { Class<?> c = Class.forName(args[0]); out.format("Class:%n %s%n%n", c.getCanonicalName()); out.format("Modifiers:%n %s%n%n", Modifier.toString(c.getModifiers())); out.format("Type Parameters:%n"); TypeVariable[] tv = c.getTypeParameters(); if (tv.length != 0) { out.format(" "); for (TypeVariable t : tv) out.format("%s ", t.getName()); out.format("%n%n"); } else { out.format(" -- No Type Parameters --%n%n"); } out.format("Implemented Interfaces:%n"); Type[] intfs = c.getGenericInterfaces(); if (intfs.length != 0) { for (Type intf : intfs) out.format(" %s%n", intf.toString()); out.format("%n"); } else { out.format(" -- No Implemented Interfaces --%n%n"); } out.format("Inheritance Path:%n"); List<Class> l = new ArrayList<Class>(); printAncestor(c, l); if (l.size() != 0) { for (Class<?> cl : l) out.format(" %s%n", cl.getCanonicalName()); out.format("%n"); } else { out.format(" -- No Super Classes --%n%n"); } out.format("Annotations:%n"); Annotation[] ann = c.getAnnotations(); if (ann.length != 0) { for (Annotation a : ann) out.format(" %s%n", a.toString()); out.format("%n"); } else { out.format(" -- No Annotations --%n%n"); } // production code should handle this exception more gracefully } catch (ClassNotFoundException x) { x.printStackTrace(); } } private static void printAncestor(Class<?> c, List<Class> l) { Class<?> ancestor = c.getSuperclass(); if (ancestor != null) { l.add(ancestor); printAncestor(ancestor, l); } }}
执行结果:
$ java ClassDeclarationSpy java.util.concurrent.ConcurrentNavigableMapClass: java.util.concurrent.ConcurrentNavigableMapModifiers: public abstract interfaceType Parameters: K VImplemented Interfaces: java.util.concurrent.ConcurrentMap<K, V> java.util.NavigableMap<K, V>Inheritance Path: -- No Super Classes --Annotations: -- No Annotations --
$ java ClassDeclarationSpy "[Ljava.lang.String;"Class: java.lang.String[]Modifiers: public abstract finalType Parameters: -- No Type Parameters --Implemented Interfaces: interface java.lang.Cloneable interface java.io.SerializableInheritance Path: java.lang.ObjectAnnotations: -- No Annotations --
$ java ClassDeclarationSpy java.io.InterruptedIOExceptionClass: java.io.InterruptedIOExceptionModifiers: publicType Parameters: -- No Type Parameters --Implemented Interfaces: -- No Implemented Interfaces --Inheritance Path: java.io.IOException java.lang.Exception java.lang.Throwable java.lang.ObjectAnnotations: -- No Annotations --
$ java ClassDeclarationSpy java.security.IdentityClass: java.security.IdentityModifiers: public abstractType Parameters: -- No Type Parameters --Implemented Interfaces: interface java.security.Principal interface java.io.SerializableInheritance Path: java.lang.ObjectAnnotations: @java.lang.Deprecated()
阅读全文
0 0
- Java反射之获取类的标识符
- Java反射之获取类的信息
- Java反射(一):获取类的反射
- JAVA反射(二):通过反射获取类的结构
- JAVA反射机制-class类的获取
- java反射---获取类的构造方法
- java反射---获取类的成员变量
- java反射---获取类的方法
- Java反射获取类的属性值
- java反射获取类的信息
- 通过反射获取java类的实例
- Java反射二 获取类的基本信息
- Java反射获取类的完整结构
- java反射(1)获取类的所有
- java反射之——获取Class对象的方法
- java反射机制之获取子类的具体泛型
- java 反射之获取class对象的三种方式
- java反射之获取class对象的三种方式
- XMind 8 Update6破解补丁破解过程
- Python3.x和Python2.x的区别
- 《Apache Flume教程》第六章 Flum的配置和使用方法
- ambari安装配置
- Linux 下安装软件
- Java反射之获取类的标识符
- maven deploy指定版本号
- QTP/UFT能捕捉到对象但是点击不了,录制点击也没反应
- 设计模式--备忘录模式
- python更新已经存在的excel 表内容
- mysql--事务
- input标签之外是否一定添加form标签
- [Leetcode] Populating Next Right Pointers in Each Node 二叉树Next指针
- org.json.JSONException: No value for api_data_ver