如何使方法仅接受实体

时间:2019-04-29 02:16:35

标签: jpa generics entity

我想制作一个可以接受任何类型的javax.persistence.Entity对象的方法。

我尝试过这个。

通用方法

import javax.persistence.Entity;

public <T extend Entity> void GenericMethod(T entity) {...}

用于测试的实体

@Entity
public class EntityObject {...}

测试

GenericMethod(new EntityObject());

我在编译时出错,类型...的方法GenericMethod(T)不适用于参数(EntityObject)。

如何将方法限制为仅接受带有@Entity注释的对象?

1 个答案:

答案 0 :(得分:0)

最简单的答案是您不能这样做。至少不作为编译时检查。 T extend Entity仅在Entity是接口或类时才有效;在您的情况下,这是一个注释,并且JLS禁止这样做。

唯一的方法是通过运行时检查,如下所示:

private static void test(EntityObject entityObject) {
    Annotation [] all = entityObject.getClass().getAnnotations();
    // filter on the ones you care
}

但是,这当然只能在运行时 起作用。