2010-02-17 55 views
2

我的意思是:为什么在bean中创建受保护的属性被认为是一种不好的做法?

public class SomeBackingBean { 

    protected String someString; 

    public void setSomeString (String str) { 
     this.someString = str; 
    } 

    public String getSomeString { 
     return someString; 
    } 
} 

这只是一个笼统的回答一般情况下。

现在第二个例子:

public abstract class AbstractBean<T extends EntityInterface> { 

    protected T entity; 

    public void setEntity (T t) { 
     this.entity = t; 
    } 

    public void getEntity() { 
     return entity; 
    } 

    protected ReturnType calculateSomethingCommon() { 
     //use entity (knowing that it implements EntityInterface) 
     //to implement some common for all subclasses logic 
    } 
} 

public class ConcreteBean extends AbstractBean<ConcreteEntity> { 
    ... 
    //and here we can write only specific for this bean methods 
    ... 
} 

是第二个例子是不好的做法太的例子吗?

回答

6

一般来说,受保护的变量违反了面向对象的原则。你正在给其他对象直接访问成员变量。通过这样做,您可以形成更紧密的耦合,并且使其更难以更改变量,因为其他对象正在直接使用它。这也意味着你不能做任何事情,比如在设置时进行验证,在获取者/设置者周围添加日志记录等。

0

例如,如果您有一个PropertyChangeListener注册到bean的属性,则任何注册的侦听器可能都不是通知受保护的财产是否被子类直接更改。