我想存儲是一個子類的抽象類的對象,但在這裏說明一個問題:如何將通用參數傳遞給方法?
abstract class Letter {
public void store_object(Letter letter) {
HashMap<Class<? extends Letter>, ? extends Letter> map = new HashMap<>();
map.put(letter.getClass(), letter); <-- this line throws an error
}
}
class A extends Letter {}
class B extends Letter {}
原因map.put
拋出一個錯誤是letter
不是一個子類的Letter
(它是Letter
的直接實例)。
有沒有辦法將方法參數更改爲Letter的通用子類?喜歡的東西:
public void store_object(? extends Letter letter) {
或
public void store_object(Object<? extends Letter> letter) {
的錯誤是:
no suitable method found for put(Class<CAP#1>,NewClass19.Letter)
method Map.put(Class<? extends NewClass19.Letter>,CAP#2) is not applicable
(argument mismatch; NewClass19.Letter cannot be converted to CAP#2)
method AbstractMap.put(Class<? extends NewClass19.Letter>,CAP#2) is not applicable
(argument mismatch; NewClass19.Letter cannot be converted to CAP#2)
method HashMap.put(Class<? extends NewClass19.Letter>,CAP#2) is not applicable
(argument mismatch; NewClass19.Letter cannot be converted to CAP#2)
where CAP#1,CAP#2 are fresh type-variables:
CAP#1 extends NewClass19.Letter from capture of ? extends NewClass19.Letter
CAP#2 extends NewClass19.Letter from capture of ? extends NewClass19.Letter
你能發表確切的錯誤嗎?而且,你認爲'它是一個Letter的直接實例'是什麼意思?如果「Letter」是抽象的,你怎麼能直接看到它呢? – sstan
發佈錯誤。它涉及到'HashMap'期待''類型的變量?擴展Letter「,但是它得到了一個'Letter'類型的變量。當我說「Letter'的'直接實例,這就是我所指的。 – ryvantage
而不是使用'Map'你可以使用'設置'如果你需要知道某個類型,你可以使用'instanceof' (這組也將接受函的子類)。 –
maraca