gpt4 book ai didi

java - Java 中的强不变性与弱不变性?

转载 作者:搜寻专家 更新时间:2023-10-30 21:05:13 26 4
gpt4 key购买 nike

在我的 Java 面试问答列表中,它说,在 Java 中,您可以通过三种方式使对象不可变。其中一种方式是:

Ensure that methods can't be overridden by either making the class final (Strong Immutability) or making your methods final (Weak immutability).

为什么将方法设置为 final 被认为比将类设置为 final 更不可变?另外,强不变性和弱不变性是什么意思?

最佳答案

因为 Liskov Substitution Principle指出子类实例可以在任何需要父类(super class)实例的地方被替换,而不会从调用者的角度改变语义。子类可能会引入可变行为,从而违反 LSP。

一方面, final方法(和私有(private)成员变量)限制了通过父类(super class)接口(interface)直接看到的改变语义的范围。另一方面,可变子类可能会间接引入违规行为。

例如,基于不变性假设,调用者框架可能不会在多线程场景中进行克隆或使用同步。这在应用于可变子类时会导致重大问题,但不是由于对父类(super class)接口(interface)的任何语义更改。

关于java - Java 中的强不变性与弱不变性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31772872/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com