对于最新的java1.8而言,reflect中接口的结构是这样的:
- java.lang.reflect.AnnotatedElement
- java.lang.reflect.AnnotatedType
- java.lang.reflect.AnnotatedArrayType
- java.lang.reflect.AnnotatedParameterizedType
- java.lang.reflect.AnnotatedTypeVariable
- java.lang.reflect.AnnotatedWildcardType
- java.lang.reflect.GenericDeclaration
- java.lang.reflect.TypeVariable<D> (also extends java.lang.reflect.Type)
- java.lang.reflect.AnnotatedType
- java.lang.reflect.InvocationHandler
- java.lang.reflect.Member
- java.lang.reflect.Type
- java.lang.reflect.GenericArrayType
- java.lang.reflect.ParameterizedType
- java.lang.reflect.TypeVariable<D> (also extends java.lang.reflect.AnnotatedElement)
- java.lang.reflect.WildcardType
其中AnnotatedType下的几个子接口可以不用管,其他结构看起来还是很简单的。
类的继承结构如下:
- java.lang.reflect.AccessibleObject (implements java.lang.reflect.AnnotatedElement)
- java.lang.reflect.Executable (implements java.lang.reflect.GenericDeclaration, java.lang.reflect.Member)
- java.lang.reflect.Constructor<T>
- java.lang.reflect.Method
- java.lang.reflect.Field (implements java.lang.reflect.Member)
- java.lang.reflect.Executable (implements java.lang.reflect.GenericDeclaration, java.lang.reflect.Member)
- java.lang.reflect.Array
- java.lang.reflect.Modifier
- java.lang.reflect.Parameter (implements java.lang.reflect.AnnotatedElement)
- java.security.Permission (implements java.security.Guard, java.io.Serializable)
- java.security.BasicPermission (implements java.io.Serializable)
- java.lang.reflect.ReflectPermission
- java.security.BasicPermission (implements java.io.Serializable)
- java.lang.reflect.Proxy (implements java.io.Serializable)
其中security下的几个可以先不管
而对于java.lang.reflect.ReflectPermission来说,他的主要作用是去除反射默认的权限控制,允许直接操作对象的private等修饰符修饰的属性或者方法等。
由于反射机制的默认行为受限于Java的访问控制,比如,访问私有的方法,字段,除非拥有访问权限,否则Java安全机制允许查看任意对象有哪些域,而不允许读它们的值(读取将抛异常)。然而如果一个Java程序没有受到安全管理器的控制,就可以覆盖访问控制。为了达到这个目的,就需要调用Field、Method、Constructor对象的setAccessible()方法。
反射操作的 Permission 类。ReflectPermission 是一种指定权限,没有动作。当前定义的唯一名称是 suppressAccessChecks,它允许取消由反射对象在其使用点上执行的标准 Java 语言访问检查 - 对于 public、default(包)访问、protected、private 成员。
该包的继承与实现图如下:
时间: 2024-10-05 05:06:28