具有实现接口的泛型参数的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);