【发布时间】:2016-06-16 23:11:23
【问题描述】:
我们经常有很多实体类型的项目(Hibernate/JPA,...)。实体类型有一个基本类型,如用于 ID 的 int、long 或 string。我们有接受和返回这些原语的 DAO 和服务。
long doSomething(long blubId, long blabId, long fooId, long barId, ...)
如您所见,这可能非常令人困惑。我想利用静态类型检查并为其设置类型。
long doSomething(BlubId blubId, BlabId blabId, FooId fooId, BarId barId, ...)
但这似乎效率低下。您对如何解决此问题有任何想法吗?
注意,在 JEE 上下文中有时需要使用原语进行处理(JSF 支持的 bean、持久性......)
【问题讨论】:
-
“但这似乎效率低下” - 在您进行数据库调用的情况下,您预计这种低效率会有多严重?
-
在 Java 中没有特殊的方法可以做到这一点。您只需创建一个普通类 BlubId,其中包含一个
long字段、一个 getter,可能还有一个 equals/hash/toString。它会像任何其他类一样工作。 (其他语言有特殊的处理方式,但 Java 没有。) -
@JonSkeet 在内存方面可能效率低下。想象一下许多复杂对象的集合。反过来,复杂对象具有 blubId、blabId、... 作为成员。将 ID 作为原始 ID 而不是在堆上分配内存至少为 BLOCKSIZE(通常 = 512b)的对象(包装器)在内存方面成本较低。也别忘了 GC,...
-
在 C/C++ 中可以: typedef unsigned long BlubId;问题解决了。
-
@kalamar:当然,周围有很多小物体,可能时间很短。 GC 擅长处理这个问题。我希望您的实际 data(字符串等)无论如何都会相形见绌。您是否真的 测量 效率低下,有具体目标?当然,在 C++ 中有一些方法可以做到这一点 - 但这些方法在 Java 中不起作用。
标签: java typechecking