我有一個方法需要多個參數,其中一些參數將在方法內部更改。有些被用作只讀。客戶端(調用這種方法的代碼的其他部分)提供對象實例作爲參數。Java語言構造來指示參數不會發生變異?
Java語言的構造有什麼可供選擇,讓我聲明的說法應該不能或不願或不能在方法內部發生突變。 Constrcuts像註釋或關鍵字,它告訴客戶端該方法不會更改在方法調用中用作參數的對象實例。還構造了這樣的情況,如果我(作爲這種方法的實現者)試圖在方法實現內意外地突變對象,將會生成編譯錯誤或警告。
我知道關鍵字final
但這只是爲了確保引用不被更新。
不可變性不是解決方案,因爲在其他方法(或我的應用程序中的其他方法)中,我希望將該類型的實例設置爲可變的,只有在此方法調用中,我想給客戶端一個「承諾」 ,我不會改變他作爲參數提供的實例。
對參數進行深度複製或克隆或讓客戶端(調用者)執行此類操作並不是必需的,因爲它不是方法邏輯的一部分,無論如何都需要更改實例。我只是想知道這種語言是否有助於雙重檢查,這是不會發生的。
你可以做深拷貝和傳遞。 – John
一種骯髒的方式是使用[StackTraceElement的](http://stackoverflow.com/questions/421280/how-do-i-find-the-caller-of-a-method-using-stacktrace-or-reflection)提取上次調用的方法/類。如果從一個*不可接受的上下文*中調用此方法(setter方法),你可以拋出一個異常('UnsupportedOperation'?)。我其實不認爲這是一個好主意:P – TheLostMind