java 调用其他方法_java – 随时调用其他方法调用方法

这是使用

Proxy类的纯Java中的一个实现:

import java.lang.reflect.*;

import java.util.*;

public class Demo

{

public static void main(String[] args)

{

Map map = new HashMap();

map.put("onStart", "abc");

map.put("onEnd", "def");

Library library = new LibraryProxy(map, new LibraryImpl()).proxy();

library.onStart();

library.onEnd();

library.onRun();

}

}

interface Library

{

void onStart();

void onEnd();

void onRun();

}

class LibraryImpl

{

public void abc() { System.out.println("Start"); }

public void def() { System.out.println("End"); }

}

class LibraryProxy implements InvocationHandler

{

Map map;

Object impl;

public LibraryProxy(Map map, Object impl)

{

this.map = map;

this.impl = impl;

}

public Library proxy()

{

return (Library) Proxy.newProxyInstance(Library.class.getClassLoader(),

new Class[] { Library.class }, this);

}

@Override

public Object invoke(Object proxy, Method m, Object[] args) throws Throwable

{

Object res = null;

String name = map.get(m.getName());

if (name == null) {

System.out.println("[" + m.getName() + " is not defined]");

} else {

m = impl.getClass().getMethod(name, m.getParameterTypes());

res = m.invoke(impl, args);

}

System.out.println("super duper");

return res;

}

}

输出:

Start

super duper

End

super duper

[onRun is not defined]

super duper

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值