假设我有这个界面:
public interface i{
void setImage(Image image);
}
我希望实现该接口方法的类方法不仅可以接受图像作为方法参数,还可以接受所有扩展图像的类。
界面内部需要的是:
<T extends Image> void setImage(T image);
但当然,这不是正确的方法。我应该如何在接口中编写通用方法?
答案 0 :(得分:5)
您可以在界面中使用泛型声明方法:
<T extends Image> void setImage(T image);
但实际上并没有太多用处:你可以在image
上调用的唯一方法是在Image
上定义的方法,所以你不妨只是非一般地声明它:
void setImage(Image image);
这将接受Image
类型或任何子类的参数。
如果您想要返回与参数类型相同的变量,则声明方法级类型变量可能很有用:
<T extends Image> T setImage(T image);
或者如果您需要将通用参数约束到与其他参数相关的类型:
<T extends Image> void setImage(T image, List<T> imageList);
如果没有通用参数,它将无济于事,例如
<T extends Image> void setImage(T image1, T image2)
因为你可以传入Image
的任何两个子类;再一次,你也可以非一般地做。
答案 1 :(得分:0)
您可以尝试这样:
public interface i<M extends Image>{
void setImage(M image);
}