首页 > 解决方案 > 实例变量与?

问题描述

考虑这个转换器接口:

public interface Converter<T1, T2>
{
public T2 convert(T1 toConvert);

public T1 reverseConvert(T2 toReverseConvert);
}

如果我现在有一个抽象类,它将转换器接口作为通用参数:

public abstract ConverterContainer<T extends Converter<?,?>>{
    protected final T converter;
    protected final T1 converterT1; //inherit converter T1
    protected final T2 converterT2; //inherit converter T2

}

我希望能够从转换器继承类型,而不必在 ConverterContainer 中声明泛型类型。

标签: javagenerics

解决方案


我希望能够从转换器继承类型,而不必在 ConverterContainer 中声明泛型类型。

您必须为派生类和父类声明所有泛型类型,但您可以将它们绑定在一起:

public abstract ConverterContainer<T1, T2, T extends Converter<T1, T2>>
       extends Converter<T1,T2>

所以在这里你有你的新课

  • 类型T1T2与父类中的确切含义(但您可以更改它们的名称,如果您愿意,重要的是它们出现在extends子句中的位置)

  • 一个额外的类型T,在这种情况下被限制为 a Converter<T1, T2>,但也可能是完全不同的东西


推荐阅读