Java 根据对象类型确定要调用的方法
好的,我所有的实体都有一个基类,我们称它为BaseEntity。 所有其他实体类继承自此实体类,例如:Java 根据对象类型确定要调用的方法,java,Java,好的,我所有的实体都有一个基类,我们称它为BaseEntity。 所有其他实体类继承自此实体类,例如: A extends BaseEntity { ... } B extends BaseEntitay { private A myA; } 如您所见,一个实体可以与另一个实体有关系。 事实上,有一个层次结构,就像D有C有B有a 问题是: 我想创建一个类,它将调用不同基类类型的对象上的方法。 这个想法是要有一个这样的公共方法: public BaseClass getLowerLay
A extends BaseEntity { ... }
B extends BaseEntitay {
private A myA;
}
如您所见,一个实体可以与另一个实体有关系。
事实上,有一个层次结构,就像D有C有B有a
问题是:
我想创建一个类,它将调用不同基类类型的对象上的方法。
这个想法是要有一个这样的公共方法:
public BaseClass getLowerLayer(BaseClass entity) {
return getLowerLayer(entity);
}
然后在同一类中,所有需要的方法:
public B getLowerLayer(C entit) {
return someFancyMethod(entity); // this is defined elsewhere to get the right entity. I can not modify it.
}
但这不起作用,因为它创建了一个无限循环。
有没有一种方法可以以微创的方式创造出这样的东西(没有instanceof?我想我知道你的意思。如果我没有错的话,这是一个多态性的完美例子 事实上,您正在将基类扩展到子类,这让您想知道超级类如何知道这些子类就是扩展他的子类?我有一个简单的解决办法。我不善于透彻地解释,但我将举一个例子:
public abstract class AbstractDAO<T extends Serializable> {
protected EntityManager em;
protected Class<?> entityClass;
public AbstractDAO(EntityManager em, Class<?> c) {
this.em = em;
this.entityClass = c;
}
@SuppressWarnings("unchecked")
public T findById(Serializable id) {
if (id == null) {
throw new PersistenceException("id cannot be null");
}
return (T) em.find(entityClass, id);
}
}
public class CustomerDAO extends AbstractDAO<Customer> {
public CustomerDAO(EntityManager em) {
super(em, Customer.class);
}
}
public class OrderDAO extends AbstractDAO<Order> {
public OrderDAO(EntityManager em) {
super(em, Order.class);
}
}
“PersistenceManager”是我创建的自定义类。闻起来像是设计问题。你能告诉我们你想做什么吗?
我想创建一个类,在不同的基类类型的对象上调用一个方法。
你不能-你能做的是,你可以在其他对象上调用方法,但是层次结构中调用方法的方式是由Java确定的。
EntityManager em = PersistenceManager.getEntityManager();
CustomerDAO customDAO = new CustomerDAO(em);
customDAO.findById(45325L);