![]() |
|
||||||||||
|
|
|
|||||
|
Вот такая интересная байка :
Есть скажем 5 классов, похожих по реализации и все имеющие setter / getter ( set info / get info ) Однако установка set info(value:SomeDiffrentClass) как создать общий интерфейс для этих 5 классов, чтобы включить в него данный сеттер / геттер , если у каждого из 5 классов свой SomeDiffrentClass ?
__________________
Марк Tween |
|
|||||
|
буду краток
модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
|
Если у них разные SomeDiffrentClass, какой же это интерфейс?
делай ISomeDiffrentClass а уже в реализациях кастуй
__________________
Отряд Котовскага |
|
|||||
|
Котяра - это все понятно. Косяк в другом
SomeDiffrentClass имеет различные методы внутри от другого сомеДифрент, соотв основной класс не увидит нужных методов. Я понимаю, что это не есть тру, мне было просто интересно. в данном случае яконечно же не буду строить интерфейс, он там не к месту
__________________
Марк Tween |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
А зачем? Интерфейс-то, простите, разный. Вы не можете использовать эти 5 разных типов в одной и той же ситуации, раз они принимают данные разных типов. Вы можете создать.. интерфейс данных (что по сути нелепо). Но Вы уверены, что это вообще можно называть культурным словом "Архитектура"? Вы сейчас ищете способ заставить компилятор собрать программу, в которой в сеттеры сознательно передаются не те данные, которые им нужны. Одумайтесь!
![]()
__________________
Reality.getBounds(this); |
|
|||||
|
Инфокора дело говорит.
Мне тоже хотелось создать RenderersGroup, в котором присобачить скролл с пулом объектов. Ну, например, 20 рендереров, которые рендерят некоторый вектор Vector.<SomeModels>, а при прокрутке меняют свои модели (рендерили с 0 по 19, после с 20 по 39). Однако, модели могут быть какие угодно, главное, чтобы когда рендереру дёргали сеттер модели - тип совпадал. Да, мне хочется темплейтов/генериков. Очень хочется.
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
|
буду краток
модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
|
Цитата:
_info как КонкретныйКласс Цитата:
__________________
Отряд Котовскага |
|
|||||
|
Проблема принципиальная (нет генериков в as3) - либо приведение типов, либо копипаста кода.
Приведение типов обычно, как бы не было противно его делать - выигрывает. В критических случаях, где типизация очень нужна, можно обернуть базовый нетипизированный класс, пример обертки для хеша: public class TypedObject { private var _object:Object = {}; public function get(key:String):MyType { return _object[key]; } public function set(key:String, value:MyType):void { _object[key] = value; } } Ну или, если требуется универсальная обработка TypedHash - дальше изголяться (пробовал такое для итератора - оверхед жуткий - выкинул нафиг и забил - итераторы только для haXe хороши): public interface IHashable { function getUniversal(key:String):Object; function setUniversal(key:String, value:Object):void; } public class TypedObject implements IHashable { private var _object:Object = {}; public function get(key:String):MyType// Этим пользуется кто знает, что им TypedObject передали { return getUniversal(key) as MyType; } public function set(key:String, value:MyType):void { setUniversal(key, value); } public function getUniversal(key:String):Object// Этим пользуется тот, кто знает только о IHashable { return _object[key]; } public function setUniversal(key:String, value:Object):void { _object[key] = value; } } Последний раз редактировалось expl; 12.11.2011 в 21:37. |
![]() |
![]() |
Часовой пояс GMT +4, время: 22:34. |
|
|
« Предыдущая тема | Следующая тема » |
|
|