当前位置:  开发笔记 > 编程语言 > 正文

JavaBeans的替代品?

如何解决《JavaBeans的替代品?》经验,为你挑选了1个好方法。

我讨厌JavaBeans模式的激情像一千个太阳的火焰一样燃烧.为什么?

详细.这是2009年.我不应该为房产写7 LOC.如果他们有事件听众,那么请抓住你的帽子.

没有类型安全的参考.没有类型安全的方法来引用属性.Java的全部意义在于它是类型安全的,并且它最流行的模式并不是所有类型都安全的.

我想要的是:

class Customer {
    public Property name = new Property();
}

我主要是一名Web开发人员,因此需要JPA和Wicket支持.

帮助我离开javabean火车!



1> Dave Ray..:

我认为你与那里的宣言非常接近(见下面的草图).但是,通过使用非bean方法,您可能会失去大多数假定JavaBeans协议生效的工具所提供的支持.请善待.下面的代码是我的头顶...

public class Property {
    public final String name;
    T value;
    private final PropertyChangeSupport support;

    public static  Property newInstance(String name, T value, 
                                              PropertyChangeSupport support) {
        return new Property(name, value, support);
    }

    public static  Property newInstance(String name, T value) {
        return newInstance(name, value, null);
    }

    public Property(String name, T value, PropertyChangeSupport support) {
        this.name = name;
        this.value = value;
        this.support = support;
    }

    public T getValue() { return value; }

    public void setValue(T value) {
        T old = this.value;
        this.value = value;
        if(support != null)
            support.firePropertyChange(name, old, this.value);
    }

    public String toString() { return value.toString(); }
}

然后继续使用它:

public class Customer {
    private final PropertyChangeSupport support = new PropertyChangeSupport();

    public final Property name = Property.newInstance("name", "", support);
    public final Property age = Property.newInstance("age", 0, support);

    ... declare add/remove listenener ...
}


Customer c = new Customer();
c.name.setValue("Hyrum");
c.age.setValue(49);
System.out.println("%s : %s", c.name, c.age);

因此,现在声明属性是一行代码,并包含属性更改支持.我调用了方法setValue()和getValue(),所以它仍然看起来像一个bean来代码像Rhino和东西,但为了简洁,你可以添加get()和set().其余部分留给读者练习:

正确处理序列化

处理空值检查

如果您关心自动装箱开销,可能会为原子类型添加一个专门化.

?? 我相信还有更多陷阱

另请注意,您可以子类化(通常作为匿名类)并覆盖setValue()以提供其他参数检查.

我不认为你真的可以摆脱"字符串引用",因为这几乎就是反射的全部内容.

可悲的是,在这个时代,这仍然有点像汇编编程......如果你有选择的话,Groovy,C#等等可能仍然是更好的选择.

推荐阅读
雨天是最美
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有