• 【Android】反射


    package com.example.myandroidtest;
    
    import java.lang.reflect.Constructor;
    import java.lang.reflect.Field;
    import java.lang.reflect.Method;
    import java.lang.reflect.Modifier;
    
    import android.R.integer;
    import android.app.Activity;
    import android.bluetooth.BluetoothAdapter;
    import android.content.Context;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.Menu;
    import android.view.MenuItem;
    
    
    public class MainActivity extends BaseActivity {
         Class<?> bclazz;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            Log.e("tag", "=MainActivity=onCreate=");
            try{
                //获取指定类的class对象
                Class<?> clazz = Class.forName("android.app.Notification");
                //clazz.newInstance();
                //获得所有构造函数
                Constructor[] constructors=clazz.getConstructors();
                for (Constructor constructor : constructors) {
                    Log.e("Constructor反射构造函数:","");
                        //取出第i个构造方法。
                    System.out.print(Modifier.toString(constructor.getModifiers()));
                    //---- 打印该构造方法的前缀修饰符
                    System.out.print(" "+constructor.getName()+"("); //打印该构造方法的名字
                    //---- 打印该构造方法的参数。
                    Class[] parameterTypes=constructor.getParameterTypes(); //构造方法参数集但是 数组类型显示特殊
                    for(int j=0;j<parameterTypes.length;j++) 
                    {
                        System.out.print(parameterTypes[j].getName());
                    }
                    System.out.println(")");
                }
                //修饰符 -类名 -超类名 -接口
                Log.e("Notification反射包名", Modifier.toString(clazz.getModifiers())+" "
                  +clazz.getPackage().getName()+" extends "+clazz.getSuperclass()+" implement "+clazz.getInterfaces().getClass().getName());
                //所有字段
                Field[] fields=clazz.getDeclaredFields();
                //所有public字段
                //Field[] fields=clazz.getFields();
                for(Field field : fields)
                {   //数组特殊处理
                    if (field.getType().isArray()) {
                        Log.e("Notification反射属性", field.getType().getComponentType()+" "+field.getName());
                    } else {
                        Log.e("Notification反射属性", field.getType()+" "+field.getName());
                    }
                }
                //所有方法
               Method[] methods =clazz.getDeclaredMethods();
               //所有public方法
               //Method[] methods =clazz.getMethods();
    
               for(Method method : methods)
               {
                   Log.e("Notification method反射name", Modifier.toString(method.getModifiers())+" "+method.getName());
                 
               }
               
            }catch (Exception e){
                e.printStackTrace();
                Log.e("Notification反射错误", "Exception");
            }
        
        try{
            //获得指定包的Context对象
            Context c = createPackageContext("com.example.myandroidtest", Context.CONTEXT_INCLUDE_CODE | Context.CONTEXT_IGNORE_SECURITY);
            //获得class对象
            bclazz = Class.forName("android.bluetooth.BluetoothManager");
            //所有构造函数
            Constructor[] constructors=bclazz.getDeclaredConstructors();
            //所有public构造函数
            //Constructor[] constructors=bclazz.getConstructors();
            for (Constructor constructor : constructors) {
                Log.e("Constructor反射构造函数:","");
                 //取出第i个构造方法。
                System.out.print(Modifier.toString(constructor.getModifiers()));
                //---- 打印该构造方法的前缀修饰符
                System.out.print(" "+constructor.getName()+"("); //打印该构造方法的名字
                //---- 打印该构造方法的参数。
                Class[] parameterTypes=constructor.getParameterTypes(); //构造方法参数集但是 数组类型显示特殊
    
                for(int j=0;j<parameterTypes.length;j++) 
                {
                System.out.print(parameterTypes[j].getName());
                }
                System.out.println(")");
                //constructor.newInstance(c);//实例化
            }
            //有参数构造函数
            Constructor con = bclazz.getConstructor(Context.class);
            //创建它的一个对象
            //Object maObject = bclazz.newInstance();//构造函数无参数实例化     
            Log.e("calzz 是否为Null", ""+(bclazz==null));
            Log.e("BluetoothManager反射包名", Modifier.toString(bclazz.getModifiers())+" "
                    +bclazz.getPackage().getName()+" extends "+bclazz.getSuperclass()+" implement "+bclazz.getInterfaces().getClass().getName());
            //所有字段
            Field[] fields=bclazz.getDeclaredFields();
            for(Field field : fields)
            {
                if (field.getType().isArray()) {
                    Log.e("BluetoothManager反射属性", field.getType().getComponentType()+" "+field.getName());
                } else {
                    Log.e("BluetoothManager反射属性", field.getType()+" "+field.getName());
                }
                
            }
            
           //获得所有方法
           Method[] methods =bclazz.getDeclaredMethods();
           for(Method method : methods)
           {
               Log.e("BluetoothManager method反射name", ""+method.getName());
               if (method.getName().equals("getAdapter")) {
                   //执行方法
                   method.invoke(con.newInstance(c));
            }
           }   
        }catch (Exception e){
            e.printStackTrace();
            Log.e("calzz 是否为Null", ""+(bclazz==null));
            Log.e("BluetoothManager反射错误", "Exception");
        }
        }
    
    
      
    }
  • 相关阅读:
    路漫漫的自学之路(1)
    feel better about yourself 完美破解MyEclipse 5.5.1 GA 注册码呵呵
    prctise .cpp & .h 的拆分
    JsDemo
    intro
    英汉词典
    曾国藩名言
    挫折
    去掉‘为帮助保护您的安全,internet explorer已经限制此文件显示可能访问您的计算机的活动内容’提示
    曾国藩对联欣赏
  • 原文地址:https://www.cnblogs.com/xubuhang/p/4872334.html
Copyright © 2020-2023  润新知