Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有实现接口的泛型参数的Java构造函数_Java_Generics - Fatal编程技术网

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

具有实现接口的泛型参数的Java构造函数,java,generics,Java,Generics,我试图以这样一种方式扩展泛型类,子类可以通过两种方式构造: 在构造函数中传递的对象必须扩展接口DiscriminableItem 这些对象不扩展上述接口,而是提供了一个itemdimepender作为附加参数 我尝试过这样实施: public class AdvancedAdapter<T> extends ArrayAdapter<T>{ protected ItemDistinguisher distinguisher = null; publi

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

  • 在构造函数中传递的对象必须扩展接口
    DiscriminableItem
  • 这些对象不扩展上述接口,而是提供了一个
    itemdimepender
    作为附加参数
我尝试过这样实施:

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);
    }
}
公共类高级适配器扩展ArrayAdapter{
受保护的项目识别器识别器=空;
公共接口可区分项{
布尔isDivider();
}
公共接口项识别器{
布尔isDivider();
}
public AdvancedAdapter(上下文上下文、int itemResource、T[]对象、ItemDiscriminator dist){
超级(上下文、项资源、对象);
此。区分器=距离;
}
公共AdvancedAdapter(上下文上下文、int-itemResource、T[]对象){
超级(上下文、项资源、对象);
}
}
我在第二个构造函数中遇到了一个奇怪的错误,说无法解析方法
super(…)
。这是我能想到的做这类事情的唯一方法。当然,我会尝试将
移动到类的声明中,但如果这样做,第一个构造函数将失败,因为
对象
不会扩展所需的接口


这在java中可能吗?

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

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

public <X  extends DistinguishableItem> AdvancedAdapter(Context context, int itemResource, X[] objects)

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

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

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

public <X  extends DistinguishableItem> AdvancedAdapter(Context context, int itemResource, X[] objects)
您可以测试X是否是T的子类,如果不是,则抛出异常

    super(context, itemResource, (T[]) objects);