Catching ClassCastException in a generic method when doing generic cast

孤者浪人 提交于 2019-12-01 10:41:34

After type erasure, return (T)number becomes return (Number)number (since Number is the type bound of T), which doesn't throw an exception (since number is an instance of Integer).

On the other hand, the assignment

Float f = getNumber();

is compiled to

Float f = (Float) getNumber();

since getNumber() returns a Number, which can't be assigned to a Float variable without a cast.

This cast throws the ClassCastException when getNumber() is not a Float.

4.6. Type Erasure

Type erasure is a mapping from types (possibly including parameterized types and type variables) to types (that are never parameterized types or type variables). We write |T| for the erasure of type T. The erasure mapping is defined as follows...

The erasure of a type variable (§4.4) is the erasure of its leftmost bound.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!