我正在開發一個項目(javaFX),其中存在多個bean
類和ViewModel
類,每個bean
類都存在。 A ViewModel
將每個bean
字段映射到Property
字段,我們使用該字段在我們的應用程序中處理/處理數據。 bean
的數據由REST服務檢索並且只有在某個地方被引用(否則垃圾回收器會吞下它們)。Singleton-Generic mixin類保存HashMap <ClassName,List <Class objects>:類型安全警告
加載的數據顯示在TableView中,取決於搜索條件(=用戶輸入)。如果處理新的搜索 - 與搜索標準無關 - 先前的TableView數據清空 - 所以垃圾收集器收集所有顯示的數據對象。
要一次爲多個選定的數據對象(例如人員)啓用數據處理,我希望將選定的數據對象存儲到靜態容器中,以防止它們被垃圾收集器收集。我想出了singleton類 - 但我不想爲每個ViewModel類創建一個單例類。
我已閱讀多篇文章和關於此的討論,並決定實施一個singleton類(ContainerUtil
),該類包含任何ViewModel類的ViewModel對象列表的HashMap
列表。該類的String
名稱被用作Key
,並且各自的List
被用作其Value
。
我嘗試了與Class<?>
和E
不同的實現,但總是有一個類型安全錯誤,這是我想要阻止的。所以我開始重新考慮我的解決方案,現在我不確定
- 如果這真的是很好的實踐嗎?
- 如果我在我的代碼/思想中丟失了一些重要的東西,可能會阻止我進入未經檢查的類型安全警告?
- 如果可能有更好的方法來解決所描述的問題?
任何意見或批評與我的方法是值得歡迎的!
因此,這裏是我的代碼:
public class ContainerUtil
{
private static final ContainerUtil instance;
private final Map<String, List<?>> instances_map;
/**
* <p>Constructor of Class {@link ContainerUtil}</p>
* <p>Is private to prevent other methods to instantiate this class!</p>
*/
private ContainerUtil()
{
// only a single instance allowed
this.instances_map = new HashMap<>();
}
static
{
// Instantiates the one allowed instance at application start
instance = new ContainerUtil();
}
/**
* @return The one instance of {@link ContainerUtil}
*/
public static ContainerUtil getInstance()
{
return instance;
}
/**
* <p>Creates (if not existing in the {@link #instances_map}) and returns a list (=container) of objects of the given class<p>
* @param containerClass - The class of which a container is needed
*/
public <E> List<E> getContainerForClass(final Class<E> containerClass)
{
if (!instances_map.containsKey(containerClass.getName()))
{
List<E> container = new ArrayList<>();
instances_map.put(containerClass.getName(), container);
}
return (List<E>) instances_map.get(containerClass.getName());
// ^^^^^^^^^ unchecked type safety warning
}
}
P.S:我不太知道是否這個職位更適合代碼審查,而不是堆棧溢出 - 如果是這樣,請通知我。
容器是否有共同的超類?那麼你應該可以使用''和'Map >'。 –
daniu
我曾經執行過,但警告沒有解決。 –