2
public void foo(Class<? extends Number> value) {
    // compilation error
    processNumber(value);
}

public void processNumber(Number num) {
    // do something about this number.
}

我想从 Number 的任何子类型(Integer、Double ..etc)中调用“foo”有人可以向我解释我该怎么做吗?

foo(new Integer(5)); // compilation error 
4

1 回答 1

9

您将一个Class对象作为值传递,但processNumber需要一个Number.

您可以使用此签名:

public void foo(Number value)

能够传递任何类型的内容,Numberfoo请记住Liskov 替换原则

作为旁注:你不需要foo(new Integer(5));你可以这样做:foo(5);

于 2012-11-06T15:16:15.257 回答