2016-04-29 23 views
1

我在此問題上詢問您的意見,因爲我不確定在這種情況下是否應該使用反射。是否適合在此示例中使用反射

這種情況是,我有一張表,我需要找出是否處於髒狀態。如果用戶對錶格進行更改,然後導航到另一個頁面而不保存更改,則會彈出一條警告消息,提示「未保存的更改將丟失」。

我正在使用的方法是創建一個標誌,如果該表髒和否則設置爲true。當用戶在不保存表格的情況下通過點擊鏈接(將他帶到另一個網站的鏈接)而離開時,彈出警告消息。另一方面,如果用戶在導航之前保存表格,則不會出現警告消息。

如果我將髒標誌設置爲靜態,則可能發生的問題是另一個用戶可能會遇到不應該處於該狀態的標誌。由於靜態變量綁定到類,所以每次檢查此變量時,該字段的值將在應用程序中的每個用戶之間共享,是不是?另一方面,但是,如果我不使它成爲靜態的並將它用作成員變量,那麼當我通過反射實例化對象時,它將返回默認值。如果爲布爾值,則爲False;如果爲String和或將哪個值初始化爲,則爲null。

這讓我得出這樣的結論:反射不是在這個例子中使用的最佳選擇?

我期待着您的迴音,您的意見/觀點非常感謝。

非常感謝。

回答

1

您的表格將由TableModel支持。 TableModel的實例將數據頁面顯示給用戶,並允許用戶編輯該模型中的數據,應該「知道」它是否處於保存狀態。

這可以簡單地通過創建自定義表模型,並添加一個髒標誌來完成 - 這是觸發每次setValueAt被稱爲:

public class DirtyTableModel extends DefaultTableModel { 

    protected boolean dirty; 

    public boolean isDirty() { 
    return dirty; 
    } 
    /** 
    * Called with setDirty(false) after save 
    */ 
    public void setDirty(boolean on) { 
    dirty = on; 
    } 
    @Override 
    public void setValueAt(Object aValue, int row, int column) { 
    setDirty(true); 
    super.setValueAt(aValue, row, column); 
    } 

} 

無需任何形式的反映。

0

此標誌沒有理由爲static。使其成爲static意味着它是的屬性,而不是具體的實例。換句話說,那就是說,全部是MyTable實例要麼是髒的,要麼是沒有,這沒有任何意義。你應該把這個標誌作爲一個實例變量,並且在構造函數中初始化它(或者inline,這只是將初始化放在構造函數中的語法加糖)。無論是否使用反射來初始化表格實例對於這個問題來說都是無關緊要的。