【问题标题】:Generic method inside interface接口内的通用方法
【发布时间】:2016-05-20 14:55:44
【问题描述】:

假设我有这个界面:

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

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

我在界面中需要的是这样的:

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

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

【问题讨论】:

标签: java generics methods interface


【解决方案1】:

您可以在接口中使用泛型声明方法:

<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 的任意两个子类;再说一次,你也可以用非通用的方式来做。

【讨论】:

    【解决方案2】:

    你可以这样试试:

    public interface i<M extends Image>{ 
         void setImage(M image);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-17
      • 1970-01-01
      • 2018-09-05
      • 1970-01-01
      • 1970-01-01
      • 2019-02-10
      • 1970-01-01
      相关资源
      最近更新 更多