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
答案 0 :(得分:9)
您正在传递Class
个对象作为值,但processNumber
需要Number
。
您可以使用此签名:
public void foo(Number value)
能够将任何类型的Number
传递到foo
,但请记住Liskov Substitution Principle。
作为旁注:您不需要foo(new Integer(5));
,而是可以执行此操作:foo(5);