Java 实例变量的类型是否与相同?

Java 实例变量的类型是否与相同?,java,generics,Java,Generics,考虑此转换器接口: public interface Converter<T1, T2> { public T2 convert(T1 toConvert); public T1 reverseConvert(T2 toReverseConvert); } 公共接口转换器 { 公共T2转换(T1转换); 公共T1反向转换(T2反向转换); } 如果我现在有一个抽象类,它将转换器接口作为通用参数: public abstract ConverterContainer<T e

考虑此转换器接口:

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

public T1 reverseConvert(T2 toReverseConvert);
}
公共接口转换器
{
公共T2转换(T1转换);
公共T1反向转换(T2反向转换);
}
如果我现在有一个抽象类,它将转换器接口作为通用参数:

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中声明泛型类型

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

public abstract ConverterContainer<T1, T2, T extends Converter<T1, T2>>
       extends Converter<T1,T2>
公共抽象转换器容器
扩展转换器
这是你的新课

  • 类型
    T1
    T2
    的含义与父类中的含义完全相同(但如果需要,您可以更改它们的名称,重要的是它们在
    extends
    子句中出现的位置)

  • 一个额外的类型
    T
    ,在这种情况下被限制为
    转换器
    ,但也可能是完全不同的东西


这只是一个简单的例子。请忽略Integer没有无参数构造函数这一事实。现在让我们假设它是@当你的例子如此“简单”以至于没有逻辑意义时,它就不再是“简单”了。这仍然不能改变这样一个事实:在你的代码中,你不需要关心
T1
T2
,动态地创建它们的实例简直是疯了。对于示例代码,我建议“删除所有内容,这是不好的和不必要的”。所以,如果你想得到帮助,这不是一个很好的例子。另外,不要认为您的解决方案是最好的方法。我看不出
StringIntegerConverterContainer
ConverterContainer
有任何优势,所以您似乎在毫无理由地引入额外的继承层。您仍然不需要访问
T1
T2
,因此您遇到的是一个设计问题和一个您试图强行通过的糟糕解决方案。也许您不应该尝试创建这么多扩展泛型类的命名类?直接使用泛型类就可以了?就我所见,你没有问题。我看不出需要基于类型参数创建新对象的任何原因,而且我仍然看不到将在哪里使用
T1
T2
。如果你想要一个真正的解决方案,发布你真正的问题。