大多数用户友好的方式在Java中传回两个变量?

时间:2011-06-20 20:33:42

标签: java out-parameters

我正在编写一个包含一些哈希函数的库。

我希望其中一个函数返回散列(byte [])和为散列使用而生成的随机salt(byte [])。什么是最友好,最直观的方式?

我有一个C#版本,通过返回哈希然后将salt作为out参数传回来工作,这完全有效,但是Java并没有给我带来out参数的奢侈。

有什么想法吗?

4 个答案:

答案 0 :(得分:8)

最优雅的方法当然是将哈希和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中。

如果你让这些领域成为最终的,有些人甚至可能会争辩说你可以将它们公开并跳过访问方法。

答案 1 :(得分:1)

如果您正在使用Project Lombok,则可以使用@Data注释创建一个封装hash + salt的值类,Lombok-ifier将自动生成样板代码。

使用final变量来创建一个不可变的类,你可以节省自己的悲伤。

答案 2 :(得分:0)

一种直接的方法是在结构中包含哈希和salt的小结构。

答案 3 :(得分:0)

您必须创建一个将hash字节[]和salt byte []作为两个实例变量的Object。

类似的东西:

public class HashParams {
  public byte hash[];
  public byte salt[];
}