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);
}