java - 如何 "public class FoobarID extends Long"?

标签 java

我想我必须接受 Longfinal 并且无法扩展。

在我们的项目中,我们使用数据库并以 Long-s 的形式在代码中传递不同事物的 ID。

但是 UserID 不是 LogID 也不是 ServerID,尽管它们都是 Long 。在我看来,编译器和 IDE 应该能够检测到一整类错误,例如当尝试使用 UserID 代替 ServerID 时。目前编译器无法检测到这一点,因为两者的类型都是Long

如果Long不是最终我可以说

public class UserID extends Long {};

但是Longfinal,所以我不能。还有比以下更优雅的东西吗:

    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/

相关文章:

java - Maven 程序集为 tar 设置用户名

java - 输出差异 - Java

java - 上传的文件有病毒如何验证?

java - Quarkus & Microprofile : Is there a better way to use a property from application. 属性进入@ClientHeaderParam?

java - 从 Eclipse 中的多个项目运行 JUnit 测试

java - 如何使用Java创建异步方法链?

java - 在 Android 7.0 上运行 UiAutomator2 的问题

java - 自定义运行时异常不打印堆栈跟踪

java - 如何在 Jersey 服务中返回特定响应

java - 在单击事件上处理 DownloadManager 并从 BroadcastReceiver 启动系统下载应用程序