1

我有 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 的类型用于 MoreComplexClass 的 requiredValue 是否“可能”?我想要实现的是: Beeing 能够将 currentValue 和 requiredValue 与 > == < 运算符进行比较,而无需强制转换且不会丢失 Typesafety。(也许我也在考虑复杂的方法来实现这一点)

4

2 回答 2

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才能使用这些运算符。

于 2013-01-14T11:08:47.983 回答
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;
}
}

现在我也能够以通用方式进行比较(这很重要,因为我不想强制转换为所有可能的类型。在旁注中,这现在也适用于日期等。):

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{

    }
}
}

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

于 2013-01-14T11:50:59.833 回答