Tag: 不变性

为什么实例变量是最终的?

我读了关于不可变对象的这个问题 ,并留下了关于不可变对象和最终字段的问题: 为什么我们需要在不可变类中的实例变量为final? 例如,考虑这个不可变类: public final class Immutable { private final int someVal; public Immutable(int someVal) { this.someVal= someVal; } public int getVal() { return val; } } 如果在上面的代码中没有set方法,并且实例变量只在构造函数中设置,为什么要求将实例变量声明为final?

java:示例中不可变对象的优点

请举例说明我可以看到不可变对象的优点。 我在互联网上发现的信息集中在线程中。 我还不知道线程。 如果例子使用简单的原则会很棒

为什么像java中的布尔类包装类是不可变的?

我看不出布尔包装器类成为不可变的原因。 为什么布尔包装器没有像Commons lang中的MutableBoolean那样实现,实际上可以重置。 有没有人对此有任何想法/理解? 谢谢。

番石榴的ImmutableXXX真的不变吗?

我一直在使用番石榴已经有一段时间并且真正信任它,直到我昨天偶然发现了一个例子,这让我想到了。 长话短说,这里是: public static void testGuavaImmutability(){ StringBuilder stringBuilder = new StringBuilder(“partOne”); ImmutableList myList = ImmutableList.of(stringBuilder); System.out.println(myList.get(0)); stringBuilder.append(“appended”); System.out.println(myList.get(0)); } 运行此命令后,您可以看到ImmutableList中的条目值已更改。 如果这里涉及两个线程,则可能碰巧看不到另一个线程的更新。 另外让我对答案非常不耐烦的是有效Java中的Item15,第五点说: 在构造函数中创建defensives副本 – 这似乎很合乎逻辑。 看一下ImmutableList的源代码,我看到了这个: SingletonImmutableList(E element) { this.element = checkNotNull(element); } 所以,实际上没有复制,虽然我不知道在这种情况下如何实现通用深层复制(可能是序列化?)。 那么..为什么他们称之为Immutable呢?

在不可变类中,为什么字段被标记为私有?

在创建不可变类时使字段为私有有什么好处? 我已经看到为什么在创建不可变类时,字段被声明为私有? 但我从这篇文章中得不到任何理解。 有人可以解释一下吗?

关于不变性影响的经验数据?

今天在课堂上,我的教授正在讨论如何组建课程。 该课程主要使用Java,我拥有比老师更多的Java经验(他来自C ++背景),所以我提到在Java中应该支持不变性。 我的教授让我certificate我的答案是正确的,我给出了我从Java社区听到的原因: 安全性(尤其是螺纹加工) 减少对象数量 允许某些优化(特别是对于垃圾收集器) 教授对我的发言提出质疑,他说他希望看到对这些好处的一些统计测量。 我引用了大量轶事证据,但即便在我这样做的时候,我也意识到他是对的:据我所知,还没有一项关于不变性是否真正提供它在实际代码中所承诺的好处的实证研究。 我知道它来自经验,但其他人的经历可能有所不同。 所以,我的问题是,是否有关于不变性对现实世界代码的影响的统计研究?

在Stream.reduce()这样的API中选择不变性有什么好理由?

回顾Java 8 Stream API设计,我对Stream.reduce()参数的generics不变性感到惊讶: U reduce(U identity, BiFunction accumulator, BinaryOperator combiner) 相同API的看似更通用的版本可能对U单个引用应用了协方差/逆变,例如: U reduce(U identity, BiFunction accumulator, BiFunction combiner) 这将允许以下目前无法实现的目标: // Assuming we want to reuse these tools all over the place: BiFunction numberAdder = (t, u) -> t.doubleValue() + u.doubleValue(); // This currently doesn’t work, but would work with the suggestion Stream stream = […]

变量的Java final关键字

final关键字如何不使变量成为不可变的? 维基百科说它没有。

Java中的function数据结构

Java标准库是否具有function更新的任何function数据结构,如不可变集,列表等?

我们如何通过可变引用来维护类的不变性

我知道使我们的类不可变的所有基本规则但是当有另一个类引用时我有点困惑。 我知道如果有集合而不是Address那么我们可以使用Collections.unmodifiableList(new ArrayList(modifiable)); 然后我们可以使我们的类不可变。 但在下面的情况下,我仍然无法得到这个概念。 public final class Employee{ private final int id; private Address address; public Employee(int id, Address address) { this.id = id; this.address=address; } public int getId(){ return id; } public Address getAddress(){ return address; } } public class Address{ private String street; public String getStreet(){ return street; } public void setStreet(String […]