![]() |
Цитата:
есть какой-либо интерфейс: Код AS3:
Код AS3:
Код AS3:
Код:
C:\Users\Konstantin\Flash\DifferentTests\src\ObjectTest.as(11): col: 16 Error: Implicit coercion of a value with static type Object to a possibly unrelated type IDisposable.Код AS3:
|
Ну это круто конечно, только бессмысленно =)
В моем проекте я могу не знать что именно возвращает функция, но в том что она хоть что-то возвращает я не могу сомневаться. Так что сомнительная фича. Я всегда пишу Object. @goodguy Так ты тип поставь нормальный - IDisposable, и все заработает =) |
Но похоже сильно разницы нет, и это всего лишь проверка при компилиции, ибо вот так работает:
Код AS3:
|
Цитата:
Допустим у меня в игре есть несколько видов солдат, Rookie, Thug, Mercenary и т.д. Все они, применяют интерфейс ISoldier, и при столкновениях UserData проверяется по интферфейсу объекта. Согласись, проверять каждый класс было бы глупо. Да и не известно, сколько я их еще захочу добавить. Раз уж с объектом это работать не будет, остается только звездочка. Так что фича не сомнительная, а довольно полезная. |
goodguy, это вполне логичная ошибка приведения типов, а не вызова неопределенного метода/свойства. * по сути типа вообще никакого не имеет, поэтому и ошибки как бы нет.
|
О чем я и говорю. Использование звездочки != использование Object в качестве типа
В том посте не так выразился =) |
Цитата:
Несмотря на подобные «фичи», их использование должно быть осознанным, а не ради подавления ворнингов и эксепшенов. |
Цитата:
|
В скайпе уже объяснял народу =) Ну да ладно, объясню еще раз.
Такая ситуация: бокс2д, там userData имеет тип данных *. У меня в тип данных, который может быть ей назначен, передается либо ISoldier, либо IMovable. Причем не известно когда и какой будет назначаться. Назначается он не напрямую, а через сеттер. В классах солдат сеттеры в качестве параметра имеют ISoldier, в транспортных средствах IMovable. Это нужно для проверки столкновений между разными объектами через b2ContactListener. Так вот, если я назначу туда Object, вместо *, то все мои сеттеры будут дружно кидаться ошибками прведения к типу. Да и смысла назначать туда Object не вижу, так как все равно потом придется проверять ISoldier это или IMovable. Так что звездочка здесь - самый удобный вариант (хоть и не утверждаю, что без нее обойтись нельзя). |
Все равно не понял, какое отношение это имеет к данному выражению. Ну пусть в сеттере (value:*). А кастинг-то тут каким боком? Такому сеттеру же совсем по-барабану, что в него передали, зачем ему кастинг?
Ну и, не могу промолчать, но почему же не сделать хотя бы маркерный интерфейс, реализуемый и солдатами и транспортом, какой-нибудь IForce, и спать ночью спокойно, не царапая программистскую совесть звездами? |
| Часовой пояс GMT +4, время: 13:28. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.