Java - 我应该使用int,long还是Integer表示用户ID?

Gen*_*nik 5 java

当我需要对用户ID进行数值比较时,我应该做类似的事情:

int numeric_user_id = Integer.valueOf("1234343");
Run Code Online (Sandbox Code Playgroud)

或者将它放入很长时间,还是保持整数?

谢谢!

小智 7

唯一标识符不应带有任何特殊的语义含义; 永远.UUID或GUID类型仅为实体标识符设计,因此您不会向它们推断任何语义含义,这就是使它们不透明的原因.

许多实际好处之一是,在将数据导入和导出到不同数据库时,它们永远不会发生冲突,即; 开发,qa,生产或在集群中使用时.如果你使用普通的旧数字,特别是自动递增的数字,每个数据库将拥有相同数字的不同用户,并且几乎不可能阻止欺骗和其他不良数据蔓延到不同的系统.UUID/GUID解决方案完全避免了这种问题.

有很多理由不将id用于除id之外的任何其他内容.如果你有超过30000个beta用户会发生什么,当你想让一些人退出beta用户程序时会发生什么,当......时会发生什么?

至于将id用于识别beta用户的业务逻辑,请不要使用id,使用另一个属性标志来识别它们.你可以有一个布尔标志,一个枚举或一些其他标志,甚至可以将他们是beta用户的事实与他们加入beta程序的时候结合起来nullable timestamp,这样就可以标记它们,但这可能最终成为泄漏问题不太灵活; 但在某些情况下可能是适当的.

public interface Identifiable {

    public UUID getUUID();
}

public interface BetaUser extends Identifiable {

    public boolean isBetaUser();
    public Date    joinedBetaProgramOn();
}
Run Code Online (Sandbox Code Playgroud)

int,, long和其他number类型只应用于数学 ; 不适用于与数学问题无关的身份管理或业务逻辑.

如果要获取nth系统用户,请按连接日期对其进行排序,并从列表中获取其索引