【发布时间】:2016-12-28 11:34:56
【问题描述】:
有没有办法在 Java 中实现类似于 C++ 的 const 的东西?具体来说,我有一个类似的功能
private static Vector2 sum(Vector2 vec1, Vector2 vec2) {
return vec1.cpy().add(vec2);
}
我想要
- 在签名中明确说明它不会修改它的参数,
和 - 强制它不修改它的参数(最好在编译时,但插入运行时断言也可以)。
现在我知道 java 是严格按引用传递的(我只是在开玩笑,我当然知道 it is pass-by-value or rather pass-by-copying-a-reference)。我的意思是,在 Java 中,当您调用方法时,会复制引用,但该引用指向相同的对象内容。如果类具有公共字段或设置器,则被调用的方法始终可以修改传递对象的内容。有没有例如@NotNull 之类的注释或防止这种情况的工具?我刚刚找到了像 @Contract(pure = true) 这样的 JetBrains 注释,但我认为它们没有提供任何检查。
【问题讨论】:
-
您可以将
final添加到参数中,但这只会阻止这些参数的初始化,您仍然可以调用方法和setter 来修改Vector的内容。如果您需要限制对这些的访问,您可能需要创建一个隐藏Vector的不可变类。基本上它会编写所有方法来防止更新(隐藏 setter 并将 getter 限制为原始值)