您的位置:首页 > 移动开发 > Android开发

【Android】反射

2015-10-12 17:45 471 查看
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");
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: