2012-11-06 50 views
2
public void foo(Class<? extends Number> value) { 
    // compilation error 
    processNumber(value); 
} 

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

我想從任何數字(整數,雙..等)的子類型調用「foo」 任何人都可以解釋我應該怎麼做?泛型類<?擴展數字>解釋

foo(new Integer(5)); // compilation error 
+2

你不需要在這裏仿製藥'公共無效美孚(數字值){}'將工作 –

+0

一個morething是java區分大小寫的foo(...)!= Foo(...); – invariant

回答

9

你傳遞一個Class對象作爲參數值,但processNumber需要Number

你可以使用這個簽名:

public void foo(Number value) 

能夠爲任何類型的Number進入foo但請記住Liskov Substitution Principle

作爲一個方面說明:你不需要foo(new Integer(5));你可以這樣做,而不是:foo(5);

相關問題