我想我必须接受 Long
是 final
并且无法扩展。
在我们的项目中,我们使用数据库并以 Long
-s 的形式在代码中传递不同事物的 ID。
但是 UserID
不是 LogID
也不是 ServerID
,尽管它们都是 Long
。在我看来,编译器和 IDE 应该能够检测到一整类错误,例如当尝试使用 UserID
代替 ServerID
时。目前编译器无法检测到这一点,因为两者的类型都是Long
。
如果Long
不是最终
我可以说
public class UserID extends Long {};
但是Long
是final
,所以我不能。还有比以下更优雅的东西吗:
public class UserID {
private Long ID;
UserID(Long ID) {
this.ID = ID;
}
UserID(UserID ID) {
this.ID = ID.toLong();
}
public Long toLong() {
return ID;
}
public void fromLong(Long ID) {
this.ID = ID;
}
};
编辑:我知道这是不优雅的 - “糟糕”!这些评论似乎假设我将在我的生产代码中添加类似的内容。我不是。
这看起来很浪费而且不优雅。我想祝你好运,例如DbUtils在 JavaBean 处理中使用 UserID
。
有“更好的方法”(TM)吗? (不仅仅是与 Long
-s 一起生活;-))
最佳答案
在我们的项目中,我们创建了其他 Id 继承的 Id
类,例如 UserId
。拥有单独的 Id 类对代码清晰度有很大帮助。
有一次我们遇到了一个问题,函数接受了两个长的 Id。程序员把这些 id 的顺序弄错了——像这样的错误可能会带来大问题。
我的建议是做同样的事情,不要尝试从 Long 扩展,而是从你自己的 Id 类扩展。 :)
关于java - 如何 "public class FoobarID extends Long"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33058284/