Java 返回需要完全相同的泛型序列

Java 返回需要完全相同的泛型序列,java,generics,types,enums,Java,Generics,Types,Enums,我正在尝试执行以下操作: public class Value<T extends Number> {} public class Currency<V extends Value> {} public class ValuePair<V extends Value, C extends Currency<V>> {} public class UnitStack<E extends Enum, V extends Value> {}

我正在尝试执行以下操作:

public class Value<T extends Number> {}
public class Currency<V extends Value> {}
public class ValuePair<V extends Value, C extends Currency<V>> {}
public class UnitStack<E extends Enum, V extends Value> {}
public class UnitCurrency<V extends Value, U extends Enum, S extends UnitStack<U, V>> extends Currency<V> {}
public class CustomStack extends UnitStack<CustomStack.CustomEnum, Value<Double>> {
  public enum CustomEnum {
    ;
  }
}

public class Program {
  public static void main(String[] args){
    test();
  }
  public static ValuePair<Value<Double>, UnitCurrency<Value<Double>, Enum, UnitStack<Enum, Value<Double>>>> test() {
    return new ValuePair<Value<Double>, UnitCurrency<Value<Double>, CustomStack.CustomEnum, CustomStack>>();
  }
}

泛型类型参数是不变的。继承仅适用于基类型(
ValuePair
,在本例中);因此,除非使用通配符或有界参数,否则您不能在外部
之间的任何位置使用子类型。您在其中有原始类型:
Currency
需要是
Currency
,或类似类型:以及当前具有
扩展值的任何位置。老实说,我认为你在这里过度使用泛型。
/tmp/java_UHRI1F/Program.java:6: error: incompatible types: ValuePair<Value<Double>,UnitCurrency<Value<Double>,CustomEnum,CustomStack>> cannot be converted to ValuePair<Value<Double>,UnitCurrency<Value<Double>,Enum,UnitStack<Enum,Value<Double>>>>
    return new ValuePair<Value<Double>, UnitCurrency<Value<Double>, CustomStack.CustomEnum, CustomStack>>();
           ^
1 error
public interface UnitStackTranslation<F extends UnitStack, T extends UnitStack, FV extends ValuePair, TV extends ValuePair> {
TV translateFrom(FV value, F from, T to);
FV translateTo(TV value, T to, F from);
}