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