java中的const函数参数?

jdm*_*jdm 7 java const-correctness

有没有办法const在Java中实现类似于C++的东西?具体来说,我有一个像

private static Vector2 sum(Vector2 vec1, Vector2 vec2) {
    return vec1.cpy().add(vec2);
}
Run Code Online (Sandbox Code Playgroud)

而且我想

  1. 在签名中明确表示它不会修改它的参数,
    并且
  2. 强制它不修改它的参数(最好是在编译时,但插入运行时断言也可以).

现在我知道java严格按引用传递(我只是戏弄,我知道它是传值,或者更确切地说是复制 - 引用).我的意思是,在Java中,当您调用方法时,将复制引用,但该引用指向相同的对象内容.如果类具有公共字段或setter,则被调用的方法始终可以修改传递的对象的内容.是否有任何例如注释@NotNull或工具来防止这种情况?我刚刚发现JetBrains注释@Contract(pure = true),但我不认为它们提供任何检查.

Ore*_*hak 4

您不能保证该方法不会更改参数。如果你想避免改变对象,你应该让它不可变。您可以使用一些包装类在内部传递,而不需要提供设置器。或者,如果您需要调用某些包本地方法,您可以使您的设置器成为包本地的,并在同一包中使用一些访问帮助器类。