CやC#のenumがタイプセーフでないと言われるのは
enumが単なる数値でどんな値も取りうるからというよりもswitchを使うという行為に由来するもので
結局Javaの「タイプセーフ」enumだろうがswitch使っちゃうとタイプセーフにはなり得ないんだよな