Вот очень простой пример: я пытаюсь бросить тип объекта к примитивным, как это:Autoboxing/распаковка во время литья Integer в целое, используя «отливать» метод
Object object = Integer.valueOf(1234);
int result1 = int.class.cast(object); //throws ClassCastException: Cannot convert java.lang.integer to int
int result2 = (int)object; //works fine
Это исходный код литой методом класса «Класс»
public T cast(Object obj) {
if (obj != null && !isInstance(obj))
throw new ClassCastException(cannotCastMsg(obj));
return (T) obj;
}
private String cannotCastMsg(Object obj) {
return "Cannot cast " + obj.getClass().getName() + " to " + getName();
}
Почему это происходит? То же самое происходит и с другими примитивами.
Ну, документация для 'isInstance' указывает:« Если этот объект класса представляет примитивный тип, этот метод возвращает false ». Поэтому это не удивительно, но документация 'cast' должна сказать, что всегда будет терпеть неудачу для примитивных типов. –
Так что я не должен использовать метод литья для примитивов, а вместо этого использовать его непосредственно с помощью (int)? –
@AnmolGupta: Да, в основном. –