C#委托实现了类内部的方法暴露给调用者,类似C++中的方法指针,方法以返回值的形式传递。这种设计方式可以实现统一方法名。
import java.util.*; import java.lang.reflect.*; interface Command { Method executeMethod(); } class StartComputer implements Command { Class classType = StartComputer.class; public Method executeMethod() { try { return classType.getMethod("innerMethod", new Class[]{ int.class }); } catch(NoSuchMethodException e) { e.printStackTrace(); return null; } } public void innerMethod(int param) { // TODO: something. System.out.println("----------------- OUTPUT ------------------"); System.out.println(param); } } public class CommandStudy { public static Map<String, Class> commandMap = new HashMap<String, Class>(); static { commandMap.put("StartComputer", StartComputer.class); } public static void main(String[] args) throws IllegalAccessException, InstantiationException , InvocationTargetException{ Class startComputerClass = commandMap.get("StartComputer"); Command someCommand = (Command)startComputerClass.newInstance(); Method executeMethod = someCommand.executeMethod(); executeMethod.invoke(someCommand, new Object[] { new Integer(200) }); } }
?Command类是公共接口类,对外开放的接口方法。StartCommand实现一个Command接口。在StartCommand的executeMethod方法的内部实现了方法的转移,把StartCommand里其它方法转移到接口方法executeMethod里,这样设计后,统一方法接口。
?
C#中委托对象delegate与JAVA中Method对象主要区别在于delegate里包含方法的对象,而Method主要是对方法的描述,不包含任务对象信息。
JAVA中用invoke方法时可能会产生大量的异常。