Node
to niestatyczna klasa zagnieżdżona. Oznacza to, że jest to klasa wewnętrzna i mieści się w zakresie jej parametrów zewnętrznych.
Po napisaniu typu Node
bez żadnych wyraźnych kwalifikacji wewnątrz SeperateChainingST
, jest on domyślnie kwalifikowany jako SeperateChainingST<Key, Value>.Node
. Jest to typ sparametryzowany (ma parametry typu Key
i Value
), nawet jeśli nie "widzisz" ich podczas pisania Node
.
Jak wiadomo, nie można korzystać z tworzenia wyrażenia tablicy z typem składnika, który jest rodzajem parametryzowane:
Więc nie można zrobić
new Node[5] // which is equivalent to
new SeperateChainingST<Key, Value>.Node[5]
Ale, jak może wiecie, Wywołanie kreacji tablic może być używane z typem składnika, który jest typu surowego lub parametrem sparametryzowanym ze wszystkimi symbolami wieloznacznymi:
new HashMap[5]
new HashMap<?,?>[5]
Możemy zrobić to podobnie tutaj, z wyjątkiem tego, jak uzyskać surowy typ wewnętrznej klasy Node
? Nie jest to po prostu Node
, jak znaleźliśmy. Zamiast tego należy jednoznacznie zakwalifikować go z surowym rodzaju zewnętrznej Klasa:
new SeperateChainingST.Node[5]
lub z all-symboli wieloznacznych sposób:
new SeperateChainingST<?,?>.Node[5]
nie trzeba zdefiniować klasę Node pierwszy i używać go po ? –
Nie wierzę, że ten kod to robi. – chrylis
@KickButtowski Nie, Java nie ma nieprzyjemnych reguł deklaracji forward. – chrylis