例如,查看the Java EE 5 documentation的javax.persistence.EntityManager,为什么persist方法声明为void persist(Object entity)
但合并方法为<T> T merge(T entity)
?持久性不是一成不变似乎不一致或不对称吗?
答案 0 :(得分:2)
persist
方法可以使用任何类型的对象(*)并返回void
。没有变化。
merge
方法返回与其参数相同的类的对象。为了表达这一点,他们需要使用泛型。
(*)当然,它需要是一个实体,但它与类层次结构无关(它由注释管理,而不是由标记接口管理)。
答案 1 :(得分:1)
合并声明强制API的用户将类型作为与返回类型兼容的参数传递,尽管在JPA方法中没有使用泛型(因为它仍然需要反射)。
对于持久化方法,问题是
void persist (T entity)
与
完全一样富有表现力 void persist (Object entity)
由于API的用户仍然可以传递任何内部对象,并且由于泛型不在方法内部使用(JPA仍然需要使用反射)。