javabean之Constrained属性

来源:互联网 发布:淘宝直播间在哪 编辑:程序博客网 时间:2024/05/01 21:04

一个JavaBean的constrained属性,是指当这个属性的值要发生变化时,与这个属性已建立了某种连接的其它Java对象可否决属性值的改变。constrained属性的监听者通过抛出PropertyVetoException来阻止该属性值 的改变。


测试代码:

package com.beans;import java.beans.PropertyChangeEvent;import java.beans.PropertyChangeListener;import java.beans.PropertyChangeSupport;import java.beans.PropertyVetoException;import java.beans.VetoableChangeListener;import java.beans.VetoableChangeSupport;import java.util.HashSet;import java.util.Random;import java.util.Set;import junit.framework.TestCase;import static java.lang.System.out;import static java.lang.System.err;public class TestVetoableChange extends TestCase {public void testVetoableChange() {User user = new User();UserListener listener = new UserListener();user.addVetoableChangeListener(listener);user.addPropertyChangeListener(listener);Random random = new Random();for (int i = 0; i < 10; i++) {try {user.setNumber(random.nextInt(10));} catch (PropertyVetoException e) {err.println(e.getMessage());}}}static class User {private int number;private VetoableChangeSupport vetoableChangeSupport = new VetoableChangeSupport(this);private PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(this);public int getNumber() {return number;}public void setNumber(int number) throws PropertyVetoException {vetoableChangeSupport.fireVetoableChange("number", this.number, number);propertyChangeSupport.firePropertyChange("number", this.number, number);this.number = number;}public void addVetoableChangeListener(VetoableChangeListener listener) {vetoableChangeSupport.addVetoableChangeListener(listener);}public void removeVetoableChangeListener(VetoableChangeListener listener) {vetoableChangeSupport.removeVetoableChangeListener(listener);}public void addPropertyChangeListener(PropertyChangeListener listener) {propertyChangeSupport.addPropertyChangeListener(listener);}public void removePropertyChangeListener(PropertyChangeListener listener) {propertyChangeSupport.removePropertyChangeListener(listener);}}static class UserListener implements VetoableChangeListener, PropertyChangeListener {private Set<Integer> numberSet = new HashSet<Integer>();@Overridepublic void vetoableChange(PropertyChangeEvent evt)throws PropertyVetoException {if (numberSet.contains(evt.getNewValue())) {throw new PropertyVetoException("contains", evt);}numberSet.add((Integer) evt.getNewValue());out.println(evt.getNewValue());}@Overridepublic void propertyChange(PropertyChangeEvent evt) {out.println(evt.getOldValue() + "->" + evt.getNewValue());}}}

如果包含某个数字,就抛异常。

0 0
原创粉丝点击