Java接口 - 参数多态

时间:2011-01-21 14:42:00

标签: java interface polymorphism

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

例如,我的界面包含:

public int addItem(Object dto);

接口由各种类实现,但每个dto参数都是各种强类型对象之一,如planeDTO,trainDTO或automobileDTO。

例如,在我的planeDAO类中:

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

我是否只使用dto参数作为Object实现,然后转换为适当的类型?

4 个答案:

答案 0 :(得分:4)

如果DTO完全来自公共超类,或者实现了一个通用接口,你可以这样做:

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

    public int addItem(E dto);

}

您的具体实施可以做到:

public class PlaneImpl implements Addable<planeDTO> {
    public int addItem(planeDTO dto) { ... }
}

或者,您可以简单地定义接口以接受接口/超类:

// DTO is the common superclass/subclass
public interface Addable {

    public int addItem(DTO dto);

}

修改

您可能需要做的是:

创建界面 -

interface AddDto<E> {
    public int addItem(E dto);
}

并在你的DAO中实现它。

class planeDAO implements AddDto<planeDTO> {
    public int addItem(planeDTO dto) { ... }
}

答案 1 :(得分:0)

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

public int addItem(ITransportationMode mode);

planeDTOtrainDTOautomobileDTO全部实施ITransportationMode

答案 2 :(得分:0)

您是否尝试使用double dispatch之类的内容?根据参数的类型而变化的行为是什么?

答案 3 :(得分:0)

您也可以使用通用方法:

public interface Addable{
   public <T extends DTO> int addItem(T dto){}
}

您可以在http://download.oracle.com/javase/tutorial/extra/generics/methods.html

了解有关通用方法的更多信息