界面内部的通用方法

时间:2016-05-20 14:55:45

标签: java generics methods interface

假设我有这个界面:

public interface i{ 
     void setImage(Image image);
}

我希望实现该接口方法的类方法不仅可以接受图像作为方法参数,还可以接受所有扩展图像的类。

界面内部需要的是:

<T extends Image> void setImage(T image);

但当然,这不是正确的方法。我应该如何在接口中编写通用方法?

2 个答案:

答案 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);
}