将对象类型作为参数传递给方法?
Passing Object Type into method as a Parameter?
我有以下方法 returns 一个 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;
}
有没有办法让这个方法更通用,这样我就可以传入其他对象类型,例如
Place
, Cost
也是吗?请注意,这些不会继承相同的 super class.
例如我应该通过例如Person.class
作为方法参数等?
如果你想传入一个 class 对象并使你的方法通用,你可以这样做:
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;
}
如果您将 Person.class
作为 cls
参数传递,它将等同于您的原始代码。
假设 entityManager.find
将接受任何 class 并尝试 return 那个 class 的一个实例。
如果 entityManager.find
对其接受的 class 的特征有一些限制,您需要在泛型类型参数 <E>
.
中指定它们
我有以下方法 returns 一个 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;
}
有没有办法让这个方法更通用,这样我就可以传入其他对象类型,例如
Place
, Cost
也是吗?请注意,这些不会继承相同的 super class.
例如我应该通过例如Person.class
作为方法参数等?
如果你想传入一个 class 对象并使你的方法通用,你可以这样做:
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;
}
如果您将 Person.class
作为 cls
参数传递,它将等同于您的原始代码。
假设 entityManager.find
将接受任何 class 并尝试 return 那个 class 的一个实例。
如果 entityManager.find
对其接受的 class 的特征有一些限制,您需要在泛型类型参数 <E>
.