2016-04-21 79 views
0

我正在做一個應用程序在Android與休息和觀察員設計模式,當我做一個休息請求我緩存響應,但這個響應對象的一些我想永久讓內存中的對象應用程序被銷燬。類作爲靜態變量的容器

所以我一直在想創建一個只有公共靜態變量的類(一些項目使用這種類來聲明常量字符串)來設置它們,然後我可以在內存中使用它。這樣的事情:

public class Memory { 

    public static HashMap<String, PersonDto> people; 
    // This object could have another complex object as ArrayList or HashMap... 
    public static LocationsDto locations; 
    ... 
} 

我想知道這是否是一個不好的做法來做我想解決的問題。

+2

可能的重複[在Java中實現常量的最佳方式是什麼?](http://stackoverflow.com/questions/66066/what-is-the-best-way-to-implement-constants-in- java) – hahn

回答

1

這取決於這些對象的用法。最重要的方面是:是否可以同時修改/訪問?如果是這樣,那麼你應該實現某種同步。

如果這些對象保證在對它們進行訪問之前構建,並且他們不會事後更改其狀態,那麼就同步問題而言,您的方法會很好。

例如,如果你的Dto對象是immutable並且hashmap不會被同時修改,那麼你比較安全。如果hashmap需要支持併發訪問/修改,那麼看看ConcurrentHashMap

+0

至少最初它是不可變的,我只需要更快地訪問剩餘響應的一些對象,但我想在我的應用程序中全局使用它。 我只會在剩下的服務響應我時創建這個對象的新實例,然後我會使用這個靜態變量。 –

1

雖然它不是一個壞習慣,但它通常被認爲是具有全局可變狀態的設計缺陷。你可以找到很多關於它爲什麼如此的信息。對我來說,最重要的缺點是可測試性和不可預測的程序狀態。 如果您仍然要使用它,您還需要同步對靜態字段的訪問。