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)
但是,当然,这不是正确的方法.我应该如何在接口中编写通用方法?
您可以在界面中使用泛型声明方法:
<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; 再一次,你也可以非一般地做.