相关疑难解决方法(0)

基于价值的课程混乱

我正在寻求对基于价值的类定义的一些澄清.我无法想象,最后一个要点(6)应该如何与第一个一起工作

  • (1)它们是final和immutable(尽管可能包含对可变对象的引用)
  • (6)它们在相等时可自由替换,这意味着在任何计算或方法调用中根据equals()交换任意两个x和y实例应该不会产生明显的行为变化.

Optional 就是这样一堂课.

Optional a = Optional.of(new ArrayList<String>());
Optional b = Optional.of(new ArrayList<String>());
assertEquals(a, b); // passes as `equals` delegated to the lists

b.get().add("a");

// now bite the last bullet
assertTrue(a.get().isEmpty()); // passes
assertTrue(b.get().isEmpty()); // throws
Run Code Online (Sandbox Code Playgroud)

我读错了,还是需要更准确?

更新

伊兰的答案是有道理的(他们不再平等),但让我移动目标:

...
assertEquals(a, b); // now, they are still equal
assertEquals(m(a, b), m(a, a)); // this will throw
assertEquals(a, b); // now, they are equal, too
Run Code Online (Sandbox Code Playgroud)

让我们定义一个有趣的方法m,它会做一些变异并再次撤消它:

int …
Run Code Online (Sandbox Code Playgroud)

java immutability java-8 value-class

11
推荐指数
3
解决办法
877
查看次数

标签 统计

immutability ×1

java ×1

java-8 ×1

value-class ×1