Android 反射的简单示例

mac2024-03-29  28

package com.hongx.proxy; public class Singleton { public String name; public Singleton() { name = "FuHongXue"; } public void setName(String name) { this.name = name; } } package com.hongx.proxy; public class ActivityManagerNative { public static Singleton singleton; public ActivityManagerNative() { singleton = new Singleton(); } } package com.hongx.proxy; import java.lang.reflect.Field; public class App { static App app; public static void main(String[] args) { ActivityManagerNative activityManagerNative = new ActivityManagerNative(); app = new App(); try { Class<?> activityManagerNativeClass = Class.forName("com.hongx.proxy.ActivityManagerNative"); Field sigletoneField = activityManagerNativeClass.getDeclaredField("singleton"); sigletoneField.setAccessible(true); Object sigletoneObj = sigletoneField.get(null);//singleton为静态对象,直接传null获得 Singleton singleton = (Singleton) sigletoneObj; System.out.println("-->" + singleton.name); Singleton singleton2 = new Singleton(); singleton2.setName("YeKai"); sigletoneField.set(activityManagerNative, singleton2); System.out.println("-->" + ActivityManagerNative.singleton.name); } catch (Exception e) { e.printStackTrace(); } } }

打印:

–>FuHongXue –>YeKai

最新回复(0)