[英]Java interfaces - parametric polymorphism
在Java中,实现接口的“正确”方法是什么,方法的参数需要参数多态?
例如,我的界面包含:
public int addItem(Object dto);
该接口由各种类实现,但在每个类中,dto参数是各种强类型对象之一,例如planeDTO,trainDTO或automobileDTO。
例如,在我的planeDAO类中:
public int addItem(planeDTO dto) { ... }
我只是使用dto参数作为Object实现,然后转换为适当的类型?
如果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) { ... }
}
为什么不使用提供所需功能的接口而不引用具体类型?
public int addItem(ITransportationMode mode);
其中planeDTO
, trainDTO
和automobileDTO
都实现了ITransportationMode
你想要达到像双重派遣这样的东西吗? 根据参数类型的不同,行为是什么?
您还可以使用泛型方法:
public interface Addable{
public <T extends DTO> int addItem(T dto){}
}
您可以在以下网址阅读有关泛型方法的更多信息: http : //download.oracle.com/javase/tutorial/extra/generics/methods.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.