Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在通用JavaBean中定义受保护、公共和私有?_Java_Javabeans - Fatal编程技术网

如何在通用JavaBean中定义受保护、公共和私有?

如何在通用JavaBean中定义受保护、公共和私有?,java,javabeans,Java,Javabeans,我想知道如何在我的类GenericBean中定义受保护的、公共的和私有的属性,这将产生一个JavaBean。到目前为止,我已经声明了一个类,它将允许use访问Bean的值,但是,我不知道如何处理对这些属性的不同访问。有什么想法吗?这是我的班级: abstract class GenericBean { protected PropertyChangeSupport chg = new PropertyChangeSupport(this); protected Vetoable

我想知道如何在我的类GenericBean中定义受保护的、公共的和私有的属性,这将产生一个JavaBean。到目前为止,我已经声明了一个类,它将允许use访问Bean的值,但是,我不知道如何处理对这些属性的不同访问。有什么想法吗?这是我的班级:

abstract class GenericBean {

    protected PropertyChangeSupport chg = new PropertyChangeSupport(this);
    protected VetoableChangeSupport veto = new VetoableChangeSupport(this);

    public void addPropertyChangeListener(PropertyChangeListener pcl) {
        chg.addPropertyChangeListener(pcl);
    }

    public void removePropertyChangeListener(PropertyChangeListener pcl) {
        chg.addPropertyChangeListener(pcl);
    }

    class BoundedProperty<T>  implements PropertyChangeListener {
        private String name;
        private T value;
        private Object chgHandlerObject;
        private Method changeHandler;

        public BoundedProperty(String name) {
            this.name = name;
        }

        public T getValue() { return value; }

        public void setValue(T newValue) {
            T old = value;
            value = newValue;
            chg.firePropertyChange(name, old, value);
        }

        public void propertyChange(PropertyChangeEvent e) {
            if (!e.getPropertyName().equals(name)) return;
            if (changeHandler == null) return;
            try {
                changeHandler.invoke(chgHandlerObject);
            } catch(Exception exc) {
                exc.printStackTrace();
            }
        }

        public void setChangeHandler(Object handl, String mname) {
            try {
                Method m = handl.getClass().getDeclaredMethod(mname);
                chgHandlerObject = handl;
                changeHandler = m;
                chg.addPropertyChangeListener(this);
            } catch(Exception exc) {
                exc.printStackTrace();
                return;
            }
        }


        public void setChangeHandler(Object ohandler) {
            try {
                Method m = ohandler.getClass().getDeclaredMethod(name+"Change");
                chgHandlerObject = ohandler;
                changeHandler = m;
            } catch(Exception exc) {
                exc.printStackTrace();
                return;
            }
            chg.addPropertyChangeListener(this);
        }

        public void removeChangeHandler() {
            changeHandler = null;
            chgHandlerObject = null;
            chg.removePropertyChangeListener(this);
        }
    }


}
抽象类GenericBean{
受保护的PropertyChangeSupport chg=新的PropertyChangeSupport(此);
受保护的VetoableChangeSupport否决权=新的VetoableChangeSupport(本);
public void addPropertyChangeListener(PropertyChangeListener pcl){
chg.addPropertyChangeListener(pcl);
}
public void removePropertyChangeListener(PropertyChangeListener pcl){
chg.addPropertyChangeListener(pcl);
}
类BoundedProperty实现PropertyChangeListener{
私有字符串名称;
私人T值;
私有对象chgHandlerObject;
私有方法变更处理程序;
public BoundedProperty(字符串名称){
this.name=名称;
}
公共T getValue(){return value;}
公共无效设置值(T newValue){
T旧=价值;
值=新值;
chg.firePropertyChange(名称、旧名称、值);
}
公共无效属性更改(属性更改事件e){
if(!e.getPropertyName().equals(name))返回;
if(changeHandler==null)返回;
试一试{
调用(chgHandlerObject);
}捕获(异常exc){
exc.printStackTrace();
}
}
public void setChangeHandler(对象handl,字符串mname){
试一试{
方法m=handl.getClass().getDeclaredMethod(mname);
chgHandlerObject=handl;
changeHandler=m;
chg.addPropertyChangeListener(此);
}捕获(异常exc){
exc.printStackTrace();
返回;
}
}
公共void setChangeHandler(对象ohandler){
试一试{
方法m=ohandler.getClass().getDeclaredMethod(名称+更改);
chgHandlerObject=ohandler;
changeHandler=m;
}捕获(异常exc){
exc.printStackTrace();
返回;
}
chg.addPropertyChangeListener(此);
}
public void removeChangeHandler(){
changeHandler=null;
chgHandlerObject=null;
chg.removePropertyChangeListener(此);
}
}
}

因此,我可以决定哪些方法可用于某些字段?

这当然取决于您希望允许派生类和这些类的用户使用什么。或者我可能没有正确理解您的问题?@Uwealner,我想根据属性是公共、私有还是私有来启用/禁用setValue和getValueprotected@UweAllner是否有办法确定财产是公共财产还是私有财产,或者在类边界财产内受到保护,因此,我可以为此添加VetoHandler?通过从T类中检索字段并计算修饰符?这当然取决于您希望允许派生类和这些类的用户使用什么。或者我可能没有正确理解您的问题?@Uwealner,我想根据属性是公共、私有还是私有来启用/禁用setValue和getValueprotected@UweAllner是否有办法确定财产是公共财产还是私有财产,或者在类边界财产内受到保护,这样我就可以为它添加VetoHandler?通过从T类中检索字段并计算修饰符?