反射

2020-08-05  本文已影响0人  资本家大恶人

常用方法

//指定的类名返回类
Class forName(String className)//包名

Object newInstance (Object params)//将params参数传到构造器得到该类新的实体

printStackTrace()//将Throwable 对象和堆栈轨迹打印到标准错误流

//找到与类同一位置的资源,返回一个可以用来加载资源的URL或者输入流

URL getResource(Stirng name)

InputStream getRescourceAsStream(Stirng name)

Field

//返回包含Field对象数组,这些对象对应的是类中何其超类所有公共的字段并且可以得到类中所有的字段名字和值
Field[] getFields(“里面可填字段值的参数”)//填入参数即为指定
//返回包含Field对象数组,这些对象对应的是类和其超类所有的字段
Field[] getDeclaredFields(“里面可填字段值的参数”)“里面可填字段值的参数”

Object get(Object obj) //返回一个Field对象用该对象描述字段的值

Object set(Object obj,Object newValue) //返回一个Field对象用该对象设置字段的值

Method
//是该类和其超类所有的公共方法
getMethod[] getMethods()
//是该类和其超类所有的方法
getMethod[] getDeclaredMethods()
//得到方法
Method getMethod(“方法名”String name,方法的参数类型 Class  parameterTypes)

//是该类和其超类所有的公共构造方法
Constructor[] getConstructors()
是该类和其超类所有的构造方法
Constructor[] getDeclaredConstructors()

//得到该类的包名
String getPackageName()

//返回一个class对象数组
Class[] getExceptionTypes()

//返回一个整数,描述这个构造器、方法、字段的修饰符
int getModeifiers()

//返回表示一个构造起名、方法名或字段名、字符串
String getName()

//返回一个Class对象数组,其中各个对象表示参数类型
Class getParamtereTypes()

//返回一个返回类型的Class对象
Class getReturnType()

//设置可以访问private的字段,方法
setAccessible(ture or false)

// 传入参数返回具体值
Object invoke(Object implicitParamter,Onject[]explicitParamter)//方法返回的是包装类

反射得到数组

//getComponentType() 方法确定数组是是, 
    public static Object goodCopy0f(Object a, int newLength) {
        Class cl = a.getClass();
        if (!cl.isArray()) return null;
       
        Class componentType = cl.getComponentType();
        int length = Array.getLength(a);
       
        Object newArray = Array.newInstance(componentType, newLength);
        
        System.arraycopy(a, 0, newArray, 0, Math.min(length, newLength));
        return newArray;
      
    }

java.lang.Class类的getGenericInterfaces()方法用于获取由该实体直接实现的接口的类型。该实体可以是类或接口。该方法返回由该实体直接实现的接口类型的数组。

用法:

public Type[] getGenericInterfaces()
参数:此方法不接受任何参数。

返回值:此方法返回由该实体直接实现的接口类型的数组。

下面的程序演示了getGenericInterfaces()方法。

示例1:


// Java program to demonstrate 
// getGenericInterfaces() method 
  
import java.util.*; 
  
public class Test { 
    public static void main(String[] args) 
        throws ClassNotFoundException 
    { 
  
        // returns the Class object for this class 
        Class myClass = Class.forName("Test"); 
  
        System.out.println("Class represented by myClass: "
                           + myClass.toString()); 
  
        // Get the type of interfaces of myClass 
        // using getGenericInterfaces() method 
        System.out.println( 
            "GenericInterfaces of myClass: "
            + Arrays.toString( 
                  myClass.getGenericInterfaces())); 
    } 
}

输出:

Class represented by myClass: class Test
GenericInterfaces of myClass: []

示例2:


// Java program to demonstrate 
// getGenericInterfaces() method 
  
import java.util.*; 
  
interface Arr { 
} 
  
public class Test implements Arr { 
  
    public static void main(String[] args) 
        throws ClassNotFoundException 
    { 
        // returns the Class object 
        Class myClass = Class.forName("Test"); 
  
        // Get the type of interfaces of myClass 
        // using getGenericInterfaces() method 
        System.out.println( 
            "GenericInterfaces of myClass: "
            + Arrays.toString( 
                  myClass.getGenericInterfaces())); 
    } 
}

输出:

GenericInterfaces of myClass: [interface Arr]

通过反射得到内部类

//调用内部类编译器会默认给内部类参数默认加一个外部类的参数
利用getConstructor("第一个参数外部类","第二个参数为内部类参数")
上一篇下一篇

猜你喜欢

热点阅读