2017-07-19 139 views
1

我使用庫方法返回一個java.util.HashMap$Node對象。
我試圖將它轉換爲Map,HashMapIterator,但它們都失敗了。
要使用哪種數據類型可以投射java.util.HashMap$Node類型的對象?

+3

你不能將它轉換成其他任何東西,因爲它不是任何這些類。這是一個內部的'Node'類型,恰好存在於'HashMap'內部。我驚呆了你能夠得到它*完全可以[因爲該類是包私有的](http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/8u40 -b25/JAVA/util的/ HashMap.java?AV = F#278)。 – Makoto

+5

看起來像一個XY問題。你爲什麼想要這樣做,並且你是如何首先訪問內部類型的對象的? – Clashsoft

+0

你真的想做什麼?你正在使用的圖書館的目的是什麼?你想用'Node'對象做什麼?在這裏鑄造是錯誤的解決方案。如果你解釋你想完成什麼,那麼我們可以幫助你找到一個正確的解決方案。 –

回答

6

HashMap.Node implements Map.Entry,所以你可以轉換到那個。

+1

由於它是一個內部類,所以在未來的Java版本中可能會發生變化。依靠這個不是一個好主意。 – VGR

+0

@VGR它取決於,我正在考慮的用例是,有問題的庫返回普通的'對象',並且不使用泛型(因爲'Map.get'可以),所以'Map.Entry'可以是有效的返回值。 – kewne

1

您只能將對象轉換爲其基類或接口之一。您無法將java.util.HashMap$Node轉換爲您嘗試過的任何類或接口,因爲它沒有擴展它們中的任何一個。

我覺得很奇怪你使用的庫會返回這種類型的對象,因爲它是HashMap的內部實現細節。我建議你修改庫,如果你有權訪問源代碼,或者找到一個不同的庫來完成你所需要的。