首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有实现接口的泛型参数的Java构造函数

具有实现接口的泛型参数的Java构造函数
EN

Stack Overflow用户
提问于 2015-12-05 16:51:45
回答 1查看 633关注 0票数 1

我试图以这样一种方式扩展泛型类,即可以用两种方式构造子类:

  • 构造函数中传递的对象必须扩展接口DistinguishableItem
  • 对象不扩展上面的接口,而是提供一个ItemDistinguisher作为附加参数。

我曾尝试这样做:

代码语言:javascript
复制
public class AdvancedAdapter<T> extends ArrayAdapter<T>{
    protected ItemDistinguisher distinguisher = null;

    public interface DistinguishableItem{
        boolean isDivider();
    }
    public interface ItemDistinguisher{
        boolean isDivider();
    }

    public AdvancedAdapter(Context context, int itemResource, T[] objects, ItemDistinguisher dist) {
        super(context, itemResource, objects);
        this.distinguisher = dist;
    }
    public <T extends DistinguishableItem> AdvancedAdapter(Context context, int itemResource, T[] objects) {
        super(context, itemResource, objects);
    }
}

第二个构造函数出现了一个奇怪的错误,即super(...)方法无法解决。这是我唯一能想到的做这种事的方法。当然,我会尝试将<T extends DistinguishableItem>移到类的声明中,但是如果这样做,第一个构造函数就会失败,因为objects不会扩展所需的接口。

这在java中有可能吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-05 18:58:45

您的代码混淆了AdvancedAdapter和ArrayAdapter的类T和第二个构造函数中的参数对象类

您可以重写您的方法来查看它:

代码语言:javascript
复制
public <X  extends DistinguishableItem> AdvancedAdapter(Context context, int itemResource, X[] objects)

而且错误总是一样的,而且更加清楚:

代码语言:javascript
复制
The constructor ArrayAdapter<T>(Context, int, X[]) is undefined

因为T和X类之间没有关系

你可以投,但它不安全:

代码语言:javascript
复制
    super(context, itemResource, (T[]) objects);

您可以测试X是否是T的子类,如果不是,则抛出异常。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34108108

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档