Java接口-参数多态性

Java接口-参数多态性,java,interface,polymorphism,Java,Interface,Polymorphism,在Java中,实现方法的参数需要参数多态性的接口的“正确”方法是什么 例如,我的界面包含: public int addItem(Object dto); 接口由各种类实现,但在每个类中,dto参数是各种强类型对象之一,如planeDTO、trainDTO或automobileDTO 例如,在我的planeDAO类中: public int addItem(planeDTO dto) { ... } 我是否只是将dto参数作为对象来实现,然后转换为适当的类型?为什么不使用提供所需功能而不引用

在Java中,实现方法的参数需要参数多态性的接口的“正确”方法是什么

例如,我的界面包含:

public int addItem(Object dto);
接口由各种类实现,但在每个类中,dto参数是各种强类型对象之一,如planeDTO、trainDTO或automobileDTO

例如,在我的planeDAO类中:

public int addItem(planeDTO dto) { ... }

我是否只是将dto参数作为对象来实现,然后转换为适当的类型?

为什么不使用提供所需功能而不引用具体类型的接口

public int addItem(ITransportationMode mode);

其中
planeDTO
trainedto
automobileDTO
都实现
ITransportationMode

如果DTO都来自一个公共超类或实现一个公共接口,则可以执行以下操作:

// DTO is the common superclass/subclass
public interface Addable<E extends DTO> {

    public int addItem(E dto);

}
编辑:

您可能需要执行以下操作:

创建接口-

interface AddDto<E> {
    public int addItem(E dto);
}
接口添加到{
公共信息补充(E dto);
}
并在DAO中实现它

class planeDAO implements AddDto<planeDTO> {
    public int addItem(planeDTO dto) { ... }
}
类planeDAO实现AddDto{
公共int附加项(计划到数据){…}
}

您是否正在尝试获取类似的内容?根据参数类型的不同,哪些行为会有所不同?

您也可以使用通用方法:

public interface Addable{
   public <T extends DTO> int addItem(T dto){}
}
公共接口可添加{
公共int addItem(tdto){}
}

有关泛型方法的更多信息,请访问:

我想这类似于双重分派。每个DTO在各自的DAO addItem实现中都有自己的SQL插入。谢谢。DTO没有任何共同点(我选择它们作为示例只是为了简单起见),因此ITransportationMode实际上是空的,在实现中我不会进行类型检查(假设我在实现中也键入了ITransportationMode)。DTO之间没有任何共同点,因此我想在接口中使用Object,但是我仍然希望在实现中进行类型检查。@Bob,如果这些对象没有公共类型,那么为了验证类型,我认为每个dto类型都需要一个不同的类。如果你能给dto一个接口和一些常用的方法,那将是非常有益的。谢谢Justin。我不确定“每个dto类型有不同的类”是什么意思,除非你是说每个dto和dao组合有不同的接口?每个DTO都包含非常不同的信息,我希望使用DAO实现实际功能,因此我不打算向DTO添加任何方法。我想底线是我没有错过一些明显的东西,我想要的东西是不可能的,除非我从一个完全不同的角度来看待事情?@Bob,为了使用你在问题中指定的多态性,是的,你需要从一个非常不同的角度来看待这个问题。多态性仅在具有类型层次结构时有效。如果您要坚持使用不遵循特定接口或继承某个公共超类的对象,您将需要完全不同的东西。再次感谢,我真诚地感谢您的反馈。我已经玩了很多次了,即使我的DTO是从一个超类继承的,我仍然不能在接口中键入一个参数作为超类,并在每个实现中键入与这个超类的子类相同的参数,我认为它可以工作,但它不能。毕竟,除了DTO的超类是Object之外,这就是我正在做的事情。我欢迎你有任何进一步的想法。
class planeDAO implements AddDto<planeDTO> {
    public int addItem(planeDTO dto) { ... }
}
public interface Addable{
   public <T extends DTO> int addItem(T dto){}
}