使用泛型类型的嵌入式泛型

时间:2013-01-14 11:04:43

标签: java generics

我有2个不同的课程。一个是通用valueHolder,它可以包含扩展数字的任何内容。

class ValueHolder<T extends number>{
    private T currentValue;

   //more functions, database logic, etc...
}

另一个类更复杂,并且具有“targetValue”。它的参数化如下:

class MoreComplexClass<T extends ValueHolder<?>>
    private T valueHolder;
    private XXX requiredValue;

    //a lot more functions.
}

是否可以将valueHolder的Type用于MoreComplexClass的requiredValue? 我想要实现的是:Beeing能够将currentValue和requiredValue与&gt;进行比较。 ==&lt;操作人员无需铸造而不会丢失类型安全。 (也许我也在想复杂的方法来实现这个目标)

2 个答案:

答案 0 :(得分:3)

答案是肯定的,你可以用这种方式声明复杂类

class MoreComplexClass<N extends Number, T extends ValueHolder<N>>
    private T valueHolder;
    private N requiredValue;

    //a lot more functions.
}

但由于您使用的是Number类,因此无法使用这些运算符,您需要使用其中一种XXXvalue()方法(即:doubleValue()longValue()来自Number类,以便能够使用这些运算符。

答案 1 :(得分:0)

由于评论我做了一些更改,现在看起来像这样:

public class ValueHolder<T extends Comparable<T>> {
private T currentValue;

public T getCurrentValue() {
    return currentValue;
}

public void setCurrentValue(T currentValue) {
    this.currentValue = currentValue;
}
}

public class MoreComplexClass<N extends Comparable<N>, T extends ValueHolder<N>> {
private T valueHolder;
private N requiredValue;

public N getRequiredValue() {
    return requiredValue;
}

public void setRequiredValue(N requiredValue) {
    this.requiredValue = requiredValue;
}

public T getValueHolder() {
    return valueHolder;
}

public void setValueHolder(T valueHolder) {
    this.valueHolder = valueHolder;
}
}

现在我也可以用Generic方式进行比较(这是essentiell,因为我不想投射到所有可能的类型。在Sidenote中,这也适用于Dates等。):

public class Main {
public static void main(String[] args) {

    ValueHolder<Long> longHolder = new ValueHolder<>();
    longHolder.setCurrentValue(2L);

    MoreComplexClass<Long, ValueHolder<Long>> mcc = new MoreComplexClass<>();
    mcc.setRequiredValue(1L);

    int compare = mcc.getRequiredValue().compareTo(mcc.getValueHolder().getCurrentValue());

    if (compare < 0) {

    } else if (compare > 0) {

    }else{

    }
}
}

我会给你一个解决方案,让我指向正确的方向;)