2010-02-17 30 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的屬性,則任何註冊的偵聽器可能都不是通知受保護的財產是否被子類直接更改。

相關問題