zoukankan      html  css  js  c++  java
  • 【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");
        }
        }
    
    
      
    }
  • 相关阅读:
    android 多线程
    Uva 10881 Piotr’s Ants 蚂蚁
    LA 3708 Graveyard 墓地雕塑 NEERC 2006
    UVa 11300 Spreading the Wealth 分金币
    UVa 11729 Commando War 突击战
    UVa 11292 The Dragon of Loowater 勇者斗恶龙
    HDU 4162 Shape Number
    HDU 1869 六度分离
    HDU 1041 Computer Transformation
    利用可变参数函数清空多个数组
  • 原文地址:https://www.cnblogs.com/xubuhang/p/4872334.html
Copyright © 2011-2022 走看看