Das ist zum Teil richtig. Du musst für den Cast schon die Typen Integer und Long verwenden. Durch Autoboxing (automatische Umwandlung von primitiven in Objekte, also int <-> Integer, long <-> Long) kann man aber durchaus primitive Typen casten. Ein Cast funktioniert (eigentlich selbstverständlich) nur, wenn das Quellobjekt auch vom Typ des Casts ist. Ich kann z.B. ein Number Objekt auf Integer casten, solang es ein Integer ist. Allerdings kann ich keinen String "2" nach Integer casten, da ein String nun mal nichts mit Integer zu tun hat.
Long nach Integer sollte mit .intValue() auf dem Long gehen. Dabei muss dir aber bewusst sein, dass Long einen größeren Wertebereich hat als Integer und es so zu Truncations kommen kann.
Gruß
Ollie