在Java中,实现接口的“正确”方法是什么?方法的参数需要参数多态?
例如,我的界面包含:
public int addItem(Object dto);
接口由各种类实现,但每个dto参数都是各种强类型对象之一,如planeDTO,trainDTO或automobileDTO。
例如,在我的planeDAO类中:
public int addItem(planeDTO dto) { ... }
我是否只使用dto参数作为Object实现,然后转换为适当的类型?
答案 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);
planeDTO
,trainDTO
和automobileDTO
全部实施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
了解有关通用方法的更多信息