Java 初始化复杂、不可变对象中的集合

Java 初始化复杂、不可变对象中的集合,java,immutability,Java,Immutability,我有一个复杂的类对象MyClass,我的应用程序将初始化很多(数千)个。应用程序是多线程的,必须从多个线程访问这些对象 一些字段的示例如下: final Map<String, Map<RelationSet, Set<String>>> packageRelationSetMap; final Map<String, Set<String>> compiledUaAccessorySetMap; 然后我可以像在构建过程中一样构建集合

我有一个复杂的类对象
MyClass
,我的应用程序将初始化很多(数千)个。应用程序是多线程的,必须从多个线程访问这些对象

一些字段的示例如下:

final Map<String, Map<RelationSet, Set<String>>> packageRelationSetMap;
final Map<String, Set<String>> compiledUaAccessorySetMap;
然后我可以像在构建过程中一样构建集合,并在最后设置
myClassInstance.immutabilityEnabled=true
,以保证不可变性(假设这些集合的所有成员本身都是不可变的,并且所有其他的不可变要求都是不可变的……我只是在这里询问集合)

这是解决这个问题的合理和有效的方法吗

更新(回复评论中的问题) 为什么过度嵌套的集合

比如说,

final Map<String, Map<RelationSet, Set<String>>> packageRelationSetMap;
…无论如何,稍后,在jvisualvm评测显示为性能猪的一段性能关键且大量使用的代码中,我需要知道,对于每个包,它共享公共附件的
关系集
,以及该公共附件集是什么。(我现在每次需要的时候都会计算所有这些,而且计算时间太长了)


我欢迎重构建议作为这个问题的另一个答案。

出于好奇,为什么过度嵌套的集合?听起来像是一个头痛的问题,当你不得不维护超过2年的时候,它出现了一个错误?事实上,集合的嵌套使它看起来像一个不可变的对象是一个可怕的类似的合并3个不同的问题。@Tschallacka我用解释更新了问题。
final Map<String, Map<RelationSet, Set<String>>> packageRelationSetMap;
final Map<Package, Map<RelationSet, Set<String>>> packageRelationSetMap;