【问题标题】:Generic type compatibility error on List<T> with T being an interfaceList<T> 上的泛型类型兼容性错误,其中 T 是一个接口
【发布时间】:2012-10-24 21:41:12
【问题描述】:

我有这个 java 代码:

tgia = new ThumbsGalleryAdapter(this, profilePositionsOverlay.items);

我得到这个错误:

构造函数 ThumbsGalleryAdapter(SharePositionMapActivity, List) 未定义 SharePositionMapActivity.java /com.shopzeus.android.majorforms.activity.MainActivity/src/com/shopzeus/android/majorforms/activity 第 114 行 Java 问题

ThumbsGalleryAdapter 的构造函数是:

public ThumbsGalleryAdapter(Activity aActivity, List<ThumbsGalleryItem> aItems)

profilePositionsOverlay.items 的类型:

List<SharedPositionMapItem>

名称ThumbsGalleryItem指的是一个接口:

public interface ThumbsGalleryItem {
    public String getTitle();
    public String getRemotePath();
}

最后,SharedPositionMapItem 是一个实现 ThumbsGalleryItem 的类:

private static class SharedPositionMapItem extends OverlayItem implements ThumbsGalleryItem

问题当然是:为什么List&lt;SharedPositionMapItem&gt;List&lt;ThumbsGalleryItem&gt; 的类型不兼容?因为SharedPositionMapItem implements ThumbsGalleryItem,我希望它们是兼容的。解决办法是什么?

【问题讨论】:

    标签: java


    【解决方案1】:
    public ThumbsGalleryAdapter(Activity aActivity, List<? extends ThumbsGalleryItem> aItems)
    

    更多详情见: http://codeidol.com/java/javagenerics/Subtyping-and-Wildcards/The-Get-and-Put-Principle/ 和这个 Explanation of the get-put principle

    【讨论】:

      【解决方案2】:

      泛型本质上是invarant,这意味着List&lt;Integer&gt;不是List&lt;Object&gt;的子类型

      您需要的是 任何类型的 ThumbsGalleryItem 列表,您可以像下面这样声明

       List<? Extends ThumbsGalleryItem>
      

      你可以阅读更多关于wildcards

      【讨论】:

        猜你喜欢
        • 2019-08-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-04
        • 2016-08-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多