背景
我们要学会将不同的东西看成是一样的,从C#中的的猫和老鼠的事件与委托到java中的事件与委托,再返回来看java中的事件与委托和java中的反射关系,会发现别有洞天。
方案
java中的事件与委托
java中的反射
我们初步进行推断 反射中的Class 类对应Delegate类,Object对应具体实现接口的老鼠类,Method对应的是Event类。
老师提出
这里只传一个方法名称,而并没有表明是哪个对象的方法,假设有这样一种情况:forName后边传的是事件与委托对应的那个接收消息类的接口,那下边的object对象就无法明确是哪个子类的对象,那下边classObj.getMethod()就没有办法知道具体是哪个子类的方法,这样是不严谨的,如何解决这种问题呢?
我们想的是在传参的时候将具体子类对象的信息传过来,具体怎么进行实施呢?
下边说实例化对象的时候会直接抛出异常,那也就是说根本走不到调方法对象那一步,那还有没有别的方法可以直接获取方法对象的时候直接将子类的对象传过去呢?
总结
将java中的反射java中的事件与委托还有C#中的事件与委托进行统一
Java 反射(Java Reflection): 反射是指在程序运行时,能够获取类的信息、属性和方法,并且可以通过这些信息来操作类的实例。Java 反射使得程序可以在运行时动态地加载类、创建对象、调用方法等,而不需要在编译时确定所有的类名和方法名。它适用于需要动态操作类和对象的情况,例如框架开发、插件系统等。
事件与委托: 事件与委托是一种在软件开发中用于实现松耦合的机制。事件是在特定条件下触发的动作,而委托是将一个方法指定为事件的处理程序。通过事件和委托,可以实现将事件的处理从触发事件的对象分离出来,从而提高代码的可维护性和可扩展性。在 Java 中,虽然没有像 C# 中那样直接的“委托”机制,但可以通过接口回调等方式实现类似的功能。
关系:
在某些情况下,可以使用反射来实现事件和委托模式。通过反射,可以在运行时动态地获取类的方法,然后将某个方法指定为事件的处理程序(委托),从而实现事件机制。这在一些动态系统或框架中可能会有所应用。
事件和委托机制在设计模式中是用来解耦系统各个部分的一种方式,使得代码更加灵活和可扩展。反射可以在一定程度上增强这种灵活性,但需要谨慎使用,因为反射操作可能会影响性能,并且降低代码的可读性。
总的来说,Java 反射、事件与委托是不同的概念,它们在不同的场景中有各自的作用。在使用反射来实现事件与委托时,需要权衡好代码的可维护性、性能和可读性。
Java中的反射和事件与委托之间存在一定的关系,但它们是两个不同的概念和机制。
反射是Java语言的一种特性,它允许程序在运行时动态地获取和操作类的信息,包括类的方法、属性、构造函数等。通过反射,程序可以在运行时动态地创建对象、调用方法、访问属性等。反射提供了一种机制,使得程序可以在运行时根据需要动态地操作类的结构和行为。
事件和委托是Java中用于实现事件驱动编程的机制。事件是程序中发生的某种特定的动作或状态变化,而事件处理是针对这些事件的响应行为。委托是一种将方法作为参数传递的机制,它可以将一个方法的执行权交给另一个方法来处理。在事件驱动编程中,委托被用于将事件处理方法注册到事件源上,当事件发生时,事件源会调用相应的事件处理方法来处理事件。
反射和事件与委托之间的关系在于,反射可以用于实现事件和委托的机制。通过反射,程序可以动态地获取和调用事件处理方法,从而实现事件的注册和触发。反射还可以用于实现委托,通过反射可以将一个方法的执行权交给另一个方法来处理。
总之,反射是一种动态获取和操作类信息的机制,而事件和委托是一种实现事件驱动编程的机制。反射可以用于实现事件和委托的机制,从而实现动态注册和触发事件,以及动态交给其他方法处理事件的功能。