方法泛型返回java类

时间:2018-06-13 22:55:28

标签: java hibernate generics casting

我正在构建使用Hibernate查询数据库的通用方法,以下方法通过主键查询实体的信息。

@PersistenceContext(unitName = "UnitPers")
private EntityManager entity;

public Object findByPk(Class clazz, Object pk) throws Exception {
    Object obj = null;
    try {
        obj = entity().find(clazz, pk);
    } catch (Exception e) {
        throw e;
    }
    return obj;
}

此方法可以正常工作,但我不想在进行调用时进行强制转换(对象为myTypeEntity)。

private myTypeEntity entity;    
entity = (myTypeEntity) findByPk(myTypeEntity.class, new Bigdecimal("1"));

//GET and SET Methods

我想避免在调用此方法时执行转换,请记住它是泛型的目的之一,但我没有设法做到这一点,任何想法?或者我打算做的事情是不可能的。

2 个答案:

答案 0 :(得分:2)

您可以使用泛型而不是使用Object:

public <T> T findByPk(Class<T> clazz, Object pk) throws Exception {
    T obj = null;
    try {
        obj = entity().find(clazz, pk);
    } catch (Exception e) {
        throw e;
    }
    return obj;
}

然后它应该可以在不进行演员表的情况下工作

private myTypeEntity entity;    
entity = findByPk(myTypeEntity.class, new Bigdecimal("1"));

答案 1 :(得分:1)

通过在方法级别引入泛型类型变量,您可以定义应返回的类型,这可以在@cpr4t3s' answer中看到。

您还可以将其代码段缩短为以下内容:

public <T> T findByPk(Class<T> clazz, Object pk) throws Exception {
    return entity().find(clazz, pk);
}

由于:

  1. 您只是在catch - 阻止
  2. 中抛出异常
  3. 您什么都不做,但返回obj - 变量