【发布时间】:2010-02-23 16:39:38
【问题描述】:
绑定属性的意义何在?对我来说,它们似乎是使用 EventObjects 的事件的类型安全性较低的版本 - 使用字符串相等性检查 event.getPropertyName() 似乎有点弱。
你为什么要使用一个而不是另一个?
【问题讨论】:
标签: java properties components javabeans
绑定属性的意义何在?对我来说,它们似乎是使用 EventObjects 的事件的类型安全性较低的版本 - 使用字符串相等性检查 event.getPropertyName() 似乎有点弱。
你为什么要使用一个而不是另一个?
【问题讨论】:
标签: java properties components javabeans
Java Beans 的全部意义在于,系统(尤其是 GUI 构建器)可以检查 Java Bean 并对其进行配置,而无需事先了解该组件。
虽然这很酷,但它确实只在这种特定情况下有用,而且现在注释会更好地工作。
所以他们使用绑定属性的原因仅仅是为了支持这种插入式 GUI 组件技术,除非您需要支持反射式 gui 构建系统,否则我不会真的更喜欢它而不是事件。
回复@Mike rodent
假设您允许您的用户创建一个您将控制的类。这个类有一个“Main”,可以处理几个事件。
通常你会让你的用户做这样的事情:
类用户类(someClass){ 无效的主要方法(){ someClass.addEventListener(new EventListener() { 公共无效事件发生(事件 e){ 事件1(e) } } } someClass.addDifferentEventListener(新的DifferentEventListener(){ 公共无效事件发生(不同事件 e){ 事件2(e) } } } } 公共无效事件1(事件e){ //事件1的java代码 } 公共无效事件2(不同事件e){ // 事件 2 的 java 代码 } }无论如何,你明白了。当然,您假设这个类在某处注册——可能在一个 xml/config 文件中。您读取它、实例化它并执行 mainMethod(由协议或接口定义),它会自行注册并开始获取对事件处理程序的调用。
现在,您可以通过注释来完成同样的事情:(您可能会认出这种模式——这几乎就是 Junit 对测试进行注释的方式。)
类用户类(){ @事件1 无效事件1方法(事件e){ event1的代码 } @事件2 无效事件2方法(另一个事件e){ event2的代码 } }这更直接,并且删除了大部分样板,并且还消除了对协议或接口的需要,注释更清晰地定义和独立。 (如果您想检查传递给方法的参数,您实际上甚至不需要事件注释,但龙就在这个大方向上)。
您仍然需要在某个地方注册该类,但这次您只需扫描每个方法中的事件注释并自己注册它们。既然读取和处理这样的类只需几行代码,为什么要将这种模式限制在单元测试中呢?
我发现另一件事非常巧妙,我将这种模式用于“插入”到我的 Java 程序中的 Groovy 类。由于无论如何我都在编译给定目录中的所有类,因此扫描注释是微不足道的。对用户的影响是他放入(或编辑)一个正确注释的 groovy 文本文件,我的代码立即编译、集成并开始调用他们的事件处理程序。
【讨论】:
我认为 JavaBeans 规范的设计考虑了通用对象处理。例如,将 JavaBean 放入 IDE 并使用可视属性编辑器对其进行配置。在这种情况下,IDE 将使用通用 PropertyChangeEvent 等。
或者,如果您想将相同命名的属性从一个 bean 复制到另一个......这是 bean 使用的另一种情况(BeanUtils 类)。
但是,如果您打算做具体的事情,正如 Noel Ang 所说,我建议您使用强类型。
【讨论】:
JavaBeans 是一种规范。它将绑定属性定义为修改后会发出通知的属性,PropertyChangeEvent 是被批准的通知实体。
所以假定的 JavaBeans-spec bean 编辑器应该监听 PropertyChangeEvents。除了需要使用该规范之外,我自己也不会使用它。
【讨论】: