jjzjj

immutability

全部标签

java - 如何在 Java 中将 java.util.Map 转换为 scala.collection.immutable.Map?

我发现很多人都在尝试这样做,并询问这个问题,但问题总是根据scala代码来回答。我需要调用一个需要scala.collection.immutable.Map的API,但我有一个java.util.Map,如何在我的java代码中将后者干净地转换为前者?编译器不同意它是隐式转换的观点,因为当我尝试它时它拒绝了!谢谢! 最佳答案 获得一个不可变的Scala映射有点棘手,因为集合库提供的转换返回所有返回可变的,你不能只使用toMap因为它需要一个隐式参数,Java编译器当然不会提供。使用该隐式参数的完整解决方案如下所示:importsc

java - 如何在 Clojure 中使 Java 类不可变?

我想在clojure中包装java的PriorityQueue类,以便在我的程序的另一部分中使用。我想弄清楚的是,是否有任何方法可以以lispy方式执行此操作并使优先级队列不可变。有什么好的方法可以做到这一点,还是我只是将PriorityQueue用作可变数据结构会更好? 最佳答案 我认为没有一种简单的方法可以将可变数据结构包装为不可变数据结构。当新版本可以巧妙地与旧版本共享数据时,不可变数据结构变得高效,如果不访问PriorityQueue的内部结构,我真的看不出如何做到这一点。如果你真的想要一个持久化的优先队列thisthrea

java - 在任何给定时刻使变量成为最终变量(在初始化和最终代码之后)

是否有可能在任何给定时刻使变量final?我想决定什么时候它是不可变的,而不仅仅是第一次分配。如果null不算作赋值就完美了。因此,如果您用null初始化它,您仍然会有一个通配符用于某些代码后的第一个赋值,不一定在构造函数中。 最佳答案 一旦你分配了一个final变量,你就永远不能改变它的值,如here所述:Afinalvariablecanonlybeinitializedonce,eitherviaaninitializeroranassignmentstatement.Itdoesnotneedtobeinitializeda

java - 没有 final 修饰符,Initialization On Demand Holder 成语线程安全吗

我有一种预感,即使用holder惯用法而不将holder字段声明为final不是线程安全的(由于不变性在Java中的工作方式)。有人可以证实这一点(希望有一些消息来源)吗?publicclassSomething{privatelonganswer=1;privateSomething(){answer+=10;answer+=10;}publicintgetAnswer(){returnanswer;}privatestaticclassLazyHolder{//noticenofinalprivatestaticSomethingINSTANCE=newSomething();}p

Java:只检查不可变对象(immutable对象)的equals()中的hashCode

我有一个不可变对象(immutable对象),例如笛卡尔空间中的一个节点。该类是不可变的,因此我缓存了hashCode以实现非常快速的散列。privatefinalinthashCode;privatefinaldoublex,y,z;publicNode(finaldoublex,finaldoubley,finaldoublez){this.x=x;this.y=y;this.z=z;this.hashCode=Objects.hashCode(this.x,this.y,this.z);}@Overridepublicbooleanequals(finalObjectobj){i

java - 为什么 String 在 Java 中是不可变的或最终的

这个问题在这里已经有了答案:WhyistheStringclassdeclaredfinalinJava?(16个答案)关闭9年前。有人告诉我这是Java中重要的字符串面试问题,它首先讨论“什么是字符串”,Java中的字符串与C或C++中的字符串有何不同,然后你被问及不可变对象(immutable对象),你是问了主要问题:“为什么String在Java中是不可变的或最终的”。你能分享你的想法吗?提前致谢。

java - java中多线程构造不可变树的算法

我想构建一个不可变树数据结构,表示文件系统目录结构的任意子集。通常会有一个知道包含/排除的过滤器,我基本上希望在构造中有一些线程支持。这听起来像是我自己编写代码的纯粹Nerd乐趣,但我实际上想知道是否有关于此主题的任何好的示例、文本或类似内容?源代码很好;) 最佳答案 这本书有所有的答案:http://www.amazon.co.uk/Purely-Functional-Structures-Chris-Okasaki/dp/0521663504 关于java-java中多线程构造不可变

java - 在 Java 中安全发布不可变对象(immutable对象)

我想了解是否需要volatile来发布不可变对象(immutable对象)。例如,假设我们有一个不可变对象(immutable对象)A://classAisimmutableclassA{finalintfield1;finalintfield2;publicA(intf1,intf2){field1=f1;field2=f2;}}然后我们有一个从不同线程访问的类B。它持有对A类对象的引用://classBpublishesobjectofclassAthroughapublicfiledclassB{private/*volatile?*/AtoShare;//thisgetterm

java - java中功能接口(interface)实例的相等性

这个问题在这里已经有了答案:Isthereawaytocomparelambdas?(3个答案)关闭7年前。我不确定如何确定功能接口(interface)的相等性/不变性。我想当我在Java8中使用这种语法糖时可能无法确保相等性,如果您有任何提示,请告诉我。我为我的问题制作了一个简短的代码片段。publicinterfaceElement{voiddoSomething(inta);}并且我尝试以功能方式添加此接口(interface)的实例publicclassFunctionSet{publicvoiddoubleUp(inta){System.out.println(a*2);}

java - 为什么 Lucene 不支持对现有文档进行任何类型的更新

我的用例涉及索引一个Lucene文档,然后在未来的多个场合添加指向该现有文档的术语,这不会为每个新术语删除和重新添加整个文档(因为性能,并且不保留原始文档条款)。我知道一个文件不能真正更新。我的问题是为什么?或者更准确地说,为什么不支持所有形式的更新(术语、存储字段)?为什么不可能添加另一个术语以指向现有文档-从技术上讲:不是所有需要的是将现有文档ID放置在术语的发布列表中。为什么这么难?是否存在一些不可变的统计数据?是否有任何解决方法来支持我将术语(索引字段)添加到现有文档的用例? 最佳答案 Idoknowthatadocumen