我刚刚发现Java中存在Method类。
此类的实例是否等同于Command设计模式上下文中Command类的实例?
如果没有,这个班级是什么'实际用途?
答案 0 :(得分:2)
此类的实例是否等同于Command设计模式上下文中Command类的实例?
不,绝对不是:Method
类是Java反射功能的一部分。另一方面,命令模式与语言无关,因此可以用任何语言实现,包括缺乏反射功能的语言。
Method
类的实际用途是访问在编译时无法访问的类的方法。您可以按名称加载类,也可以按名称获取其方法对象,然后执行调用。
说到这一点,并不意味着你无法使用反射来实现与命令模式相似的东西。实际上,通过消除代码的编译时依赖性,可以使您的实现更加灵活。例如,您可以构建一个采用插件的系统,并要求插件类实现特定的方法。您可以告诉他们,只要他们的类实现了您需要的方法,插件将被接受,而不是向插件编写者发送带有该方法签名的接口。在运行时,您将能够通过反射发现正确的方法,并在任何一方调用没有编译时依赖性的用户代码。
答案 1 :(得分:1)
此课程以及课程Field
,课程Class
都是reflection API的一部分。此API用于以间接方式提供对对象的访问。
反思背后的第一个想法是允许一个对象描述自己。例如,IDE可以显示对象的所有属性以进行调试,RAID开发等。
如果仍然以这种方式使用反射,它今天也用于动态发现对象或类的结构,并在不明确知道它的情况下“对其进行操作”:更改其字段的值或调用其方法。
例如,如果您知道A类,则可以通过这种方式调用A的方法m():
A a = new A();
a.m();
通过反射,在不明确知道A类的情况下,您可以:
Object a = A.getDeclaredConstructors()[0].newInstance();
Method m = a.getClass().getMethod("m");
m.invoke(a, null);
在第二种情况下,您可以设想一种更通用的机制,您可以在其中发现方法或字段并调用它们或在不事先了解它们的情况下更改其值。
因此,要直接回答您的问题,它与命令设计模式无关。