反射总结
2019-02-20 10:28 Spiderman25 阅读(158) 评论(0) 收藏 举报1、Class获得的方式:
new X().getClass();
X.class;
Class.forName("包名");
2、Class常用方法
构造器:1
Constructor[] getConstructors()
域:3
Filed[] getDeclareFileds() 本类自定义的属性(public private protected default),不包括从父类继承的
Filed[] getFileds() 所有本类父类public的属性
getDeclareFiled(String name);
方法:2
Method[] getDeclaredMethod() 本类自定义的方法(public private protected default),不包括从父类继承的
Method[] getMethods() 所有本类父类public的方法
Method getMethod(String name,Class... parameterTypes)
接口父类:2
Class[] getInterfaces()
Class getSuperclass()
包:2
String getName()
Package getPackage()
生成:2
Object newInstance()
Class forName(String className)
数组:2
Class getComponentType()
boolean isArray()
3、Constructor常用方法
int getModifiers()
String getName()
Class[] getParameterTypes()
String toString()
T newInstance(Object... args)
4、Field常用方法
getType()
get(Object obj)
set(Object obj,Object value)
getModifiers()
getName()
isAccessible()
setAccessible()
toString()
5、Method常用方法
getModifiers()
getName()
getParameterTypes()
getReturnType()
getExceptionTypes()
invoke(Object,Object... args)
6、通过无参构造实例化对象
Class.forName().newInstance();
7、调用有参构造实例化对象
Constructor对象.newInstance(参数);
8、Modifier.toString(modifiers);
Class方法
public static Class forName(String arg0)
public static Class forName(String arg0,boolean arg1,ClassLoader arg2)
public String toString()
public ProtectionDomain getProtectionDomain()
public native boolean isAssignableFrom(Class arg0)判定此 Class 对象所表示的类或接口与指定的 arg0参数所表示的类或接口是否相同,或是否是其超类或超接口。
public native boolean isInstance(Object arg0)arg0是被测试的对象,如果arg0是调用这个方法的class或接口 的实例,则返回true
public native int getModifiers()
public native boolean isInterface()
public native boolean isArray()
public native boolean isPrimitive()8种基本类型的时候为 true,其他为false
public native Class getSuperclass()
public native Class getComponentType()
public String getName()
public Class asSubclass(Class arg0)
public Object cast(Object arg0)
public boolean desiredAssertionStatus()
public AnnotatedType[] getAnnotatedInterfaces()
public AnnotatedType getAnnotatedSuperclass()
public Annotation getAnnotation(Class arg0)只在本类中的注解,父类的不算
public Annotation[] getAnnotations()只在本类中的注解,父类的不算
public Annotation[] getAnnotationsByType(Class arg0)
public String getCanonicalName()
public ClassLoader getClassLoader()
public Class[] getClasses()所有本类父类public的内部类
public transient Constructor getConstructor(Class[] arg0)只包含本类的public构造器,父类的不包含
public Constructor[] getConstructors()只包含本类的public构造器,父类的不包含
public Annotation getDeclaredAnnotation(Class arg0)
public Annotation[] getDeclaredAnnotations()获取从父继承的(多层也可以),所以那个注解要加上@Inherited这个注解
public Annotation[] getDeclaredAnnotationsByType(Class arg0)
public Class[] getDeclaredClasses()本类自定义的内部类(public private protected default),不包括从父类继承的
public transient Constructor getDeclaredConstructor(Class[] arg0)只包含本类的构造器(public private protected default),父类的不包含
public Constructor[] getDeclaredConstructors()只包含本类的构造器(public private protected default),父类的不包含
public Field getDeclaredField(String arg0)
public Field[] getDeclaredFields()
public transient Method getDeclaredMethod(String arg0,Class[] arg1)
public Method[] getDeclaredMethods()
public Class getDeclaringClass()在哪个类中声明的
public Class getEnclosingClass()该类是在那个类中定义的, 比如直接定义的内部类或匿名内部类
public Constructor getEnclosingConstructor()该类是在哪个构造函数中定义的,比如构造方法中定义的匿名内部类
public Method getEnclosingMethod()该类是在哪个方法中定义的,比如方法中定义的匿名内部类
public Object[] getEnumConstants()
public Field getField(String arg0)
public Field[] getFields()
public Type[] getGenericInterfaces()
public Type getGenericSuperclass()
public Class[] getInterfaces()
public transient Method getMethod(String arg0,Class[] arg1)
public Method[] getMethods()
public Package getPackage()
public URL getResource(String arg0)
public InputStream getResourceAsStream(String arg0)
public native Object[] getSigners()
public String getSimpleName()
public String getTypeName()
public TypeVariable[] getTypeParameters()
public boolean isAnnotation()
public boolean isAnnotationPresent(Class arg0)只包含本类,父不包含
public boolean isAnonymousClass()
public boolean isEnum()
public boolean isLocalClass()
public boolean isMemberClass()
public boolean isSynthetic()
public Object newInstance()
public String toGenericString()
public final void wait()
public final void wait(long arg0,int arg1)
public final native void wait(long arg0)
public boolean equals(Object arg0)
public native int hashCode()
public final native Class getClass()
public final native void notify()
public final native void notifyAll()
Constructor方法
public boolean equals(Object arg0)
public String toString()
public int hashCode()
public int getModifiers()
public String getName()
public Annotation getAnnotation(Class arg0)
public Annotation[] getDeclaredAnnotations()
public Class getDeclaringClass()在哪个类中声明的
public Class[] getParameterTypes()
public TypeVariable[] getTypeParameters()
public boolean isSynthetic()
public transient Object newInstance(Object[] arg0)
public String toGenericString()
public Annotation[][] getParameterAnnotations()
public int getParameterCount()
public boolean isVarArgs()
public AnnotatedType getAnnotatedReturnType()
public Class[] getExceptionTypes()
public Type[] getGenericExceptionTypes()
public Type[] getGenericParameterTypes()
public AnnotatedType getAnnotatedReceiverType()
public Annotation[] getAnnotationsByType(Class arg0)
public AnnotatedType[] getAnnotatedParameterTypes()
public AnnotatedType[] getAnnotatedExceptionTypes()
public Parameter[] getParameters()
public Annotation[] getAnnotations()
public Annotation getDeclaredAnnotation(Class arg0)
public Annotation[] getDeclaredAnnotationsByType(Class arg0)
public boolean isAnnotationPresent(Class arg0)
public boolean isAccessible()
public static void setAccessible(AccessibleObject[] arg0,boolean arg1)
public void setAccessible(boolean arg0)
public final void wait()
public final void wait(long arg0,int arg1)
public final native void wait(long arg0)
public final native Class getClass()
public final native void notify()
public final native void notifyAll()
Method方法
public transient Object invoke(Object arg0,Object[] arg1)
public boolean equals(Object arg0)
public String toString()
public int hashCode()
public int getModifiers()
public String getName()
public Annotation getAnnotation(Class arg0)
public Annotation[] getDeclaredAnnotations()
public Class getDeclaringClass()在哪个类中声明的
public Class[] getParameterTypes()
public Class getReturnType()
public TypeVariable[] getTypeParameters()
public boolean isDefault()判断该方法对象是否为默认方法,如果是则返回true,否则为false
public boolean isSynthetic()
public String toGenericString()
public Annotation[][] getParameterAnnotations()
public int getParameterCount()
public boolean isVarArgs()
public AnnotatedType getAnnotatedReturnType()
public Object getDefaultValue()
public Class[] getExceptionTypes()
public Type[] getGenericExceptionTypes()
public Type[] getGenericParameterTypes()
public Type getGenericReturnType()
public boolean isBridge()
public Annotation[] getAnnotationsByType(Class arg0)
public AnnotatedType[] getAnnotatedParameterTypes()
public AnnotatedType[] getAnnotatedExceptionTypes()
public AnnotatedType getAnnotatedReceiverType()
public Parameter[] getParameters()
public Annotation[] getAnnotations()
public Annotation getDeclaredAnnotation(Class arg0)
public Annotation[] getDeclaredAnnotationsByType(Class arg0)
public boolean isAnnotationPresent(Class arg0)
public boolean isAccessible()
public static void setAccessible(AccessibleObject[] arg0,boolean arg1)
public void setAccessible(boolean arg0)
public final void wait()
public final void wait(long arg0,int arg1)
public final native void wait(long arg0)
public final native Class getClass()
public final native void notify()
public final native void notifyAll()
Filed方法
public Object get(Object arg0)
public boolean equals(Object arg0)
public String toString()
public int hashCode()
public int getModifiers()
public boolean getBoolean(Object arg0)
public byte getByte(Object arg0)
public short getShort(Object arg0)
public char getChar(Object arg0)
public int getInt(Object arg0)
public long getLong(Object arg0)
public float getFloat(Object arg0)
public double getDouble(Object arg0)
public String getName()
public Annotation getAnnotation(Class arg0)
public Annotation[] getAnnotationsByType(Class arg0)
public Annotation[] getDeclaredAnnotations()
public Class getDeclaringClass()在哪个类中声明的
public boolean isSynthetic()
public String toGenericString()
public AnnotatedType getAnnotatedType()
public Type getGenericType()
public Class getType()
public boolean isEnumConstant()
public void set(Object arg0,Object arg1)
public void setBoolean(Object arg0,boolean arg1)
public void setByte(Object arg0,byte arg1)
public void setChar(Object arg0,char arg1)
public void setDouble(Object arg0,double arg1)
public void setFloat(Object arg0,float arg1)
public void setInt(Object arg0,int arg1)
public void setLong(Object arg0,long arg1)
public void setShort(Object arg0,short arg1)
public Annotation[] getAnnotations()
public Annotation getDeclaredAnnotation(Class arg0)
public Annotation[] getDeclaredAnnotationsByType(Class arg0)
public boolean isAnnotationPresent(Class arg0)
public boolean isAccessible()
public static void setAccessible(AccessibleObject[] arg0,boolean arg1)
public void setAccessible(boolean arg0)
public final void wait()
public final void wait(long arg0,int arg1)
public final native void wait(long arg0)
public final native Class getClass()
public final native void notify()
public final native void notifyAll()
Parameter方法
public boolean equals(Object arg0)
public String toString()
public int hashCode()
public int getModifiers()
public String getName()
public Annotation getAnnotation(Class arg0)
public Annotation[] getAnnotations()
public Annotation[] getAnnotationsByType(Class arg0)
public Annotation getDeclaredAnnotation(Class arg0)
public Annotation[] getDeclaredAnnotations()
public Annotation[] getDeclaredAnnotationsByType(Class arg0)
public boolean isSynthetic()
public AnnotatedType getAnnotatedType()
public Class getType()
public Executable getDeclaringExecutable()
public Type getParameterizedType()
public boolean isImplicit()
public boolean isNamePresent()
public boolean isVarArgs()判断参数是否是可变的
public final void wait()
public final void wait(long arg0,int arg1)
public final native void wait(long arg0)
public final native Class getClass()
public final native void notify()
public final native void notifyAll()
public boolean isAnnotationPresent(Class arg0)
Annotation方法
public abstract boolean equals(Object arg0)
public abstract String toString()
public abstract int hashCode()
public abstract Class annotationType()
package com.example.cluster; import org.junit.jupiter.api.Test; import java.lang.reflect.Method; import java.lang.reflect.Modifier; import java.lang.reflect.Parameter; //@SpringBootTest class ClusterApplicationTests { @Test void contextLoads() { try { Class<?> aClass = Class.forName("java.lang.annotation.Annotation"); for (Method m:aClass.getMethods()){ StringBuilder sb=new StringBuilder(); sb.append(Modifier.toString(m.getModifiers())); sb.append(" "); if(m.getReturnType().isArray()){ sb.append(m.getReturnType().getComponentType().getSimpleName()+"[]"); }else{ sb.append(m.getReturnType().getSimpleName()); } sb.append(" "); sb.append(m.getName()); sb.append("("); Parameter[] parameters = m.getParameters(); for(int i=0;i<parameters.length;i++){ sb.append(Modifier.toString(parameters[i].getModifiers())); sb.append(parameters[i].getType().getSimpleName()); sb.append(" arg"+i); sb.append(","); } if(parameters.length>0){ sb.deleteCharAt(sb.length()-1); } sb.append(")"); System.out.println(sb.toString()); } } catch (Exception e) { e.printStackTrace(); } } }
类继承关系中@Inherited的作用
类继承关系中,子类会继承父类使用的注解中被@Inherited修饰的注解
接口继承关系中@Inherited的作用
接口继承关系中,子接口不会继承父接口中的任何注解,不管父接口中使用的注解有没有被@Inherited修饰
类实现接口关系中@Inherited的作用
类实现接口时不会继承任何接口中定义的注解