Всегда использовал приведение типов таким образом:
ClassName obj = (ClassName)someObject;
JavaDoc любезно поделилась со мной информацией, что с версии 1.5 есть второй вариант:
ClassName obj = ClassName.class.cast(someObject);
Есть ли отличия между этими двумя способами, и какие?
Re: Приведение типов. Теория.
От:
Аноним
Дата:
11.01.08 15:42
Оценка:
Здравствуйте, Sovun, Вы писали:
S>Есть ли отличия между этими двумя способами, и какие?
Да, первый однозначно менее запутанный и совместим с прошлыми версиями, а также работать будет быстрее.
Второй создан для гибкости программирования, там где она будет нужна.
[moderator]Избыточное цитирование удалено[moderator] S>Есть ли отличия между этими двумя способами, и какие?
Чтобы использовать cast operator тебе надо знать тип, к которому надо кастовать, на стадии компиляции. В случае когда типы известны только в рантайм оператор использовать можно, но надо использовать дженерики и самому делать проверку типов, потому что с дженериками легко можно ошибиться:
public static void main(String[] args) throws Exception {
Integer i = 0;
testCast(i, String.class); // No ClassCastException here though Integer can't be casted to String
String s = testCast(i, String.class); // Type checking is performed only at the attempt to initialize 's' variable
}
public static <T> T testCast(Object object, Class<T> clazz) {
T t = (T)object;
System.out.println(t);
return t;
}
Видимо, чтобы не было нужды писать этот метод самому каждый раз, когда он нужен, его реализовали в стандартной библиотеке.