界面内部的通用方法

MDP*_*MDP 0 java generics methods interface

假设我有这个界面:

public interface i{ 
     void setImage(Image image);
}
Run Code Online (Sandbox Code Playgroud)

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

我在界面中需要的是:

<T extends Image> void setImage(T image);
Run Code Online (Sandbox Code Playgroud)

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

And*_*ner 7

您可以在界面中使用泛型声明方法:

<T extends Image> void setImage(T image);
Run Code Online (Sandbox Code Playgroud)

但实际上并没有太多用处:你可以调用的唯一方法image是那些定义的方法Image,所以你不妨只是非一般地声明它:

void setImage(Image image);
Run Code Online (Sandbox Code Playgroud)

这将接受类型Image或任何子类的参数.


如果您想要返回与参数类型相同的变量,则声明方法级类型变量可能很有用:

<T extends Image> T setImage(T image);
Run Code Online (Sandbox Code Playgroud)

或者如果您需要将通用参数约束到与其他参数相关的类型:

<T extends Image> void setImage(T image, List<T> imageList);
Run Code Online (Sandbox Code Playgroud)

没有通用参数,它无济于事,例如

<T extends Image> void setImage(T image1, T image2)
Run Code Online (Sandbox Code Playgroud)

因为你可以传入任何两个子类Image; 再一次,你也可以非一般地做.