gpt4 book ai didi

java - 为什么使用 javabean 绑定(bind)属性而不是事件?

转载 作者:行者123 更新时间:2023-11-30 11:59:52 27 4
gpt4 key购买 nike

绑定(bind)属性的意义到底是什么?对我来说,它们似乎是使用 EventObjects 的事件类型安全性较低的版本 - 对 event.getPropertyName() 使用字符串相等性检查似乎有点弱。

为什么要用一个而不是另一个?

最佳答案

Java Bean 的全部意义在于系统(尤其是 GUI Builder)可以检查 Java Bean 并对其进行配置,而无需事先了解该组件。

虽然这很酷,但它真的只在这种特定情况下有用,而且现在注释会工作得更好。

所以他们使用绑定(bind)属性的原因仅仅是为了支持这种插入式 GUI 组件技术,除非您需要支持反射式 gui 构建系统,否则我不会真的更喜欢它而不是事件。

对@Mike rodent 的回应

假设您允许用户创建一个由您控制的类。这个类有一个“Main”,可以处理几个事件。

通常你会让你的用户做这样的事情:

class UserClass(someClass) {    void mainMethod() {        someClass.addEventListener(new EventListener() {            public void eventsHappen(Event e){                    event1(e)                }            }        }        someClass.addDifferentEventListener(new DifferentEventListener() {            public void eventsHappen(DifferentEvent e){                    event2(e)                }            }        }    }     public void event1(Event e) {        //java code for event 1    }    public void event2(DifferentEvent e) {        // java code for event 2    }}

无论如何,你明白了。当然,您假定此类已在某处注册——可能在 xml/config 文件中。您读取它、实例化它并执行 mainMethod(由协议(protocol)或接口(interface)定义),它会自行注册并开始调用事件处理程序。

下面是您如何使用注释完成相同的事情:(您可能认识到这种模式——这几乎就是 Junit 注释测试的方式。)

class UserClass() {    @Event1    void event1Method(Event e) {        event1's code    }    @Event2    void event2Method(AnotherEvent e) {        event2's code    } }

这更加直截了当,删除了大部分样板文件,还消除了对协议(protocol)或接口(interface)的需要,注释定义更明确且独立。 (如果您关心检查传递给方法的参数,您实际上什至不需要事件注释,但龙在那个大方向上)。

您仍然需要在某处注册该类,但这次您只需扫描每个方法以查找您的事件注释并自己注册它们。既然读取和处理这样一个类只需几行代码,为什么要将此模式限制为单元测试?

另一件我发现非常巧妙的事情是,我将这种模式用于“插入”到我的 Java 程序中的 Groovy 类。因为我无论如何都要编译给定目录中的所有类,扫描注释是微不足道的。对用户的影响是他放入(或编辑)一个正确注释的 groovy 文本文件,我的代码立即编译、集成并开始调用他们的事件处理程序。

关于java - 为什么使用 javabean 绑定(bind)属性而不是事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2319926/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com