Java 如何在方法签名中使用泛型类型?

Java 如何在方法签名中使用泛型类型?,java,generics,types,Java,Generics,Types,我有这个签名 public final <T1 extends Pair<Pair<T3, T4>, Pair<T3, T4>>, T3 extends Enum<MyConstant>, T4 extends BigDecimal> void doSomething(final int number, final T1 pair); 公开决赛 无效剂量测量(最终

我有这个签名

public final <T1 extends Pair<Pair<T3, T4>, Pair<T3, T4>>,
              T3 extends Enum<MyConstant>,
              T4 extends BigDecimal>
        void doSomething(final int number, final T1 pair);
公开决赛
无效剂量测量(最终整数,最终T1对);
我可以这样使用它

Pair<Pair<MyConstant, BigDecimal>, Pair<MyConstant, BigDecimal>> pair = 
    new Pair<Pair<MyConstant, BigDecimal>, Pair<MyConstant, BigDecimal>>(
        new Pair<MyConstant, BigDecimal>(const1, value1),
        new Pair<MyConstant, BigDecimal>(const2, value2));
_myObject.doSomething(1, pair);
对=
新的一对(
新对(常数1,值1),
新对(常数2,值2));
_肌体剂量测定法(1对);
我想要这个签名,但它不起作用:

public final <T1 extends Pair<T2, T2>,
              T2 extends Pair<T3, T4>,
              T3 extends Enum<MyConstant>,
              T4 extends BigDecimal>
        void doSomething(final int number, final T1 pair);
公开决赛
无效剂量测量(最终整数,最终T1对);
我得到这个错误:

Bound mismatch: The generic method doSomething(int, T1) of type
MyObject is not applicable for the arguments (int,
Pair<Pair<MyConstant,BigDecimal>,Pair<MyConstant,BigDecimal>>). The
inferred type Pair<MyConstant,BigDecimal> is not a valid substitute
for the bounded parameter <T2 extends Pair<T3,T4>>
绑定不匹配:类型为doSomething(int,T1)的泛型方法
MyObject不适用于参数(int,
配对)。这个
推断的类型对不是有效的替换
关于有界参数

如果我正确理解了您要做的事情,这应该可以:

public final <T1 extends Pair<? extends Pair<? extends Enum<MyConstant>, 
                                             ? extends BigDecimal>, 
                              ? extends Pair<? extends Enum<MyConstant>, 
                                             ? extends BigDecimal>>>
    void doSomething(final int number, final T1 pair);

public final如果我正确理解了您正在尝试做的事情,这应该可以:

public final <T1 extends Pair<? extends Pair<? extends Enum<MyConstant>, 
                                             ? extends BigDecimal>, 
                              ? extends Pair<? extends Enum<MyConstant>, 
                                             ? extends BigDecimal>>>
    void doSomething(final int number, final T1 pair);

public final更好的方法是为您的需要创建类,不是吗?更好的方法是为您的需要创建类,不是吗?我将您的answear改进为:
public final我将您的answear改进为:
public final