将对象类型作为参数传递给方法?

jav*_*900 3 java generics class predicate nhibernate-criteria

我有以下Person通过 Id 返回对象的方法:

   private Person getPersonById(String client) {

    Person output = null;
    EntityManager entityManager = null;

    try {
        entityManager = entityManagement.createEntityManager(client);
        output = entityManager.find(Person.class, id);

    } catch (Exception e) {
     
     // handle
    
    } finally {
        entityManagement.closeEntityManager(client, entityManager);
    }
    return output;
}
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以使这个方法更加通用,以便我也可以传递其他对象类型, Place例如 Cost?请注意,它们不继承相同的超类。

例如,我应该将例如Person.class作为方法参数等传递吗?

khe*_*ood 7

如果你想传入一个类对象并使你的方法通用,你可以这样做:

private <E> E getObjectById(String client, Class<E> cls) {

    E output = null;
    EntityManager entityManager = null;

    try {
        entityManager = entityManagement.createEntityManager(client);
        output = entityManager.find(cls, id);

    } catch (Exception e) {
     
     // handle
    
    } finally {
        entityManagement.closeEntityManager(client, entityManager);
    }
    return output;
}
Run Code Online (Sandbox Code Playgroud)

如果您Person.class作为cls参数传递,它将相当于您的原始代码。

假设它将entityManager.find接受任何类并尝试返回该类的实例。

如果entityManager.find对其接受的类的特征有一些限制,则需要在泛型类型参数中指定它们<E>