有沒有辦法在Java中實現類似於C++的const
的東西?具體而言,我有一個像在Java中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中,當你調用一個方法時,引用被複制,但是引用指向相同的對象內容。如果一個類具有公共字段或setter,則被調用方法總是可以修改傳遞對象的內容。有沒有例如註釋如@NotNull
或工具來防止這種情況?我剛剛發現了像@Contract(pure = true)
這樣的JetBrains註釋,但我認爲他們不提供任何檢查。
您可以在參數中添加'final',但這隻會阻止對這些參數的初始化,您仍然可以調用方法和setter來修改'Vector'的內容。如果你需要限制對這些的訪問,你可能需要創建一個隱藏'Vector'的不可變類。基本上它會寫每一個方法來防止更新(隱藏setter並將getter限制爲原始值) – AxelH