我在寫一個包含一些散列函數的庫。在Java中傳遞兩個變量的用戶友好方式最多?
我想要其中的一個函數返回散列值(hash [])和隨機salt(byte []),它是爲散列值使用而生成的。什麼是用戶最友好和直觀的方式呢?
我有一個C#版本的這個工作,通過返回哈希,然後傳回鹽作爲一個輸出參數,它完美的工作,但Java不給我的輸出參數的豪華。
有什麼想法?
我在寫一個包含一些散列函數的庫。在Java中傳遞兩個變量的用戶友好方式最多?
我想要其中的一個函數返回散列值(hash [])和隨機salt(byte []),它是爲散列值使用而生成的。什麼是用戶最友好和直觀的方式呢?
我有一個C#版本的這個工作,通過返回哈希,然後傳回鹽作爲一個輸出參數,它完美的工作,但Java不給我的輸出參數的豪華。
有什麼想法?
最優雅的方式當然是將hash和salt封裝在一個類中並返回該類的一個實例。
class HashAndSalt {
private byte[] hash, salt;
public HashAndSalt(byte[] hash, byte[] salt) {
this.hash = hash;
this.salt = salt;
}
// access methods goes here
}
主要之所以選擇上述做法是,它成爲在客戶端變量包含的內容清楚。如果你返回類似於byte[2][]
的東西,我會忘記散列是否在索引0或1中。
如果你使字段最終,有些人甚至可能會爭辯說,你可以讓它們公開並跳過access-方法。
這樣做的直接方法是在結構中包含散列和鹽的小結構。
嚴格來說,Java中沒有任何結構... –
你將不得不創建一個哈希byte []和salt byte []作爲兩個實例變量的Object。
喜歡的東西:
public class HashParams {
public byte hash[];
public byte salt[];
}
如果你使用的項目龍目島,你可以使用@Data
註解來創建一個封裝哈希+鹽值類,和龍目-ifier將自動生成樣板代碼。
使用final
變量來創建一個不可變的類,並且您將保存自己的悲傷。
+1是的。 Out參數是一個kludge。這是一個更直觀的設計。 – hoipolloi