Java Reflect
来源:互联网 发布:花溪区4g网络基站建设 编辑:程序博客网 时间:2024/05/16 02:13
1. 反射无参构造函数
Class clazz =Class.forName("com.test.reflect.Person");
Constructor c =clazz.getConstructor(null);
Person person = (Person)c.newInstance(null);
Class clazz = Class.forName("com.test.reflect.Person");
Person p = (Person)clazz.newInstance();
2. 反射带有参数的构造函数(简单类型)
Class clazz =Class.forName("com.test.reflect.Person");
Constructor c =clazz.getConstructor(String.class);
Person p = (Person) c.newInstance("xxx");
例如:
public static UserHandle newUserHandle(intuserId) {
UserHandle userHandle =null;
try {
Constructor<UserHandle>constructor = UserHandle.class.getConstructor(int.class);
userHandle =(UserHandle) constructor.newInstance(userId);
} catch (Exception e) {
e.printStackTrace();
}
return userHandle;
}
3. 反射带有参数的构造函数(复杂类型)
Class clazz =Class.forName("com.test.reflect.Person");
Constructor c =clazz.getDeclaredConstructor(List.class);
c.setAccessible(true);
Person p = (Person) c.newInstance(new ArrayList());
4. 反射函数(非static函数)
public static voidgrantRuntimePermission(PackageManager pm,
StringpackageName, String permissionName, UserHandle user) {
try{
Methodmethod = PackageManager.class.getMethod("grantRuntimePermission",
String.class,String.class, UserHandle.class);
method.invoke(pm,packageName, permissionName, user);
}catch (Exception e) {
e.printStackTrace();
}
}
5. 反射static函数
// AppOpsManager
public static int permissionToOpCode(Stringpermission) {
try{
Methodmethod = AppOpsManager.class.getMethod("permissionToOpCode",
String.class);
return(Integer) method.invoke(null, permission);
}catch (Exception e) {
e.printStackTrace();
}
return-1;
}
6. 反射成员变量
例如:反射ApplicationInfo下的int类型变量flagsEx(info为ApplicationInfo类型对象)
ApplicationInfo.class.getField("flagsEx").getInt(info)
package org.local;
public class ReflectTest {
/**
* @param args
*/
privateint x;
publicint y;
publicString str1 = "abc";
publicString str2 = "access";
publicReflectTest(int x, int y) {
this.x= x;
this.y= y;
}
@Override
publicString toString() {
return"ReflectTest [str1=" + str1 + ", str2=" + str2 +"]";
}
}
ReflectTest test = new ReflectTest(3,5);
//取得对象字节码
Class cls = test.getClass();
//getField只能得到可见的变量
Field fd1 = cls.getField("y");//返回的值不是test对象的变量,而是Field对象。所以下面必须通过get方法传入指定的ReflectTest对象,获取值
System.out.println("value1:" +fd1.get(test));
//getDeclaredField能够得到私有的变量
Field fd2 = cls.getDeclaredField("x");
fd2.setAccessible(true);
参考:http://blog.csdn.net/howlaa/article/details/8606071
http://blog.sina.com.cn/s/blog_620b085d0100hcam.html
http://blog.csdn.net/a600423444/article/details/6448844
- java reflect
- java reflect
- java reflect
- Java Reflect
- java .reflect
- Java reflect
- java-reflect
- Reflect-Java
- JAVA Reflect
- Java Reflect
- JAVA reflect
- Java-Reflect
- java.lang.reflect
- java.lang.reflect包
- java.lang.reflect.Filed
- java.lang.reflect.Method
- java 反射机制 reflect
- java反射机制reflect
- 求完数的程序
- Android调用微信扫一扫和支付宝扫一扫
- HTML_基础_菜单栏
- malloc ()和free()
- 数组常用API
- Java Reflect
- Ubuntu安装火狐浏览器并创建桌面快捷方式
- JSP中链接MySQL数据库以及增删改查
- BZOJ 3113: Toy
- +initialize 与 +load
- ToggleButton和Switch的用法
- [C++]数组
- Android Studio插件整理
- freemarker