方法泛型返回java类

方法泛型返回java类,java,hibernate,generics,casting,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

我正在使用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

我希望在调用此方法时避免执行强制转换,请记住这是泛型的目的之一,但我没有做到这一点,有什么想法吗?或者我打算做的是不可能的。

您可以使用泛型而不是对象:

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;
}

您可以使用泛型而不是对象:

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;
}

通过在方法级别引入泛型类型变量,您可以定义应该返回的类型,这可以在答案中看到

您还可以将他的代码片段缩短为以下内容:

public <T> T findByPk(Class<T> clazz, Object pk) throws Exception {
    return entity().find(clazz, pk);
}
public T findByPk(类clazz,对象pk)引发异常{
返回实体().find(clazz,pk);
}
因为:

  • 您只是在
    catch
    -块中抛出异常
  • 您什么也不做,只返回
    obj
    -变量

  • 通过在方法级别引入泛型类型变量,您可以定义应该返回的类型,这可以在答案中看到

    您还可以将他的代码片段缩短为以下内容:

    public <T> T findByPk(Class<T> clazz, Object pk) throws Exception {
        return entity().find(clazz, pk);
    }
    
    public T findByPk(类clazz,对象pk)引发异常{
    返回实体().find(clazz,pk);
    }
    
    因为:

  • 您只是在
    catch
    -块中抛出异常
  • 您什么也不做,只返回
    obj
    -变量

  • 如果你想使用一个现有的框架来实现这一点,请看一看spring数据如果你想使用一个现有的框架来实现这一点,请看一看spring数据谢谢你的输入,我还是个新手。我将付诸实践。谢谢你的意见,我还是个新手。我将付诸实践。当做