Java 根据对象类型确定要调用的方法

Java 根据对象类型确定要调用的方法,java,Java,好的,我所有的实体都有一个基类,我们称它为BaseEntity。 所有其他实体类继承自此实体类,例如: A extends BaseEntity { ... } B extends BaseEntitay { private A myA; } 如您所见,一个实体可以与另一个实体有关系。 事实上,有一个层次结构,就像D有C有B有a 问题是: 我想创建一个类,它将调用不同基类类型的对象上的方法。 这个想法是要有一个这样的公共方法: public BaseClass getLowerLay

好的,我所有的实体都有一个基类,我们称它为BaseEntity。 所有其他实体类继承自此实体类,例如:

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