Can't sleep again. blogged a solution to implementing covariant return
types. 

 

http://www.quilix.com/node/17

 

Rick Winscot

 

 

From: flexcoders@yahoogroups.com [mailto:[EMAIL PROTECTED] On
Behalf Of Ralf Bokelberg
Sent: Thursday, June 26, 2008 9:22 AM
To: flexcoders@yahoogroups.com
Subject: Re: [flexcoders] AS3 interface question

 

Yep, it's a language feature, which is not there. I think it is called
covariant return types.
Afaik, all you can do is check the type and cast.
Cheers
Ralf.

On Thu, Jun 26, 2008 at 3:14 PM, diehlryan <[EMAIL PROTECTED]
<mailto:rdiehl%40docfinity.com> > wrote:
> I'm running into a wall when trying to use extension with interfaces.
> The example I'm about to provide works using Java, so I believe the
> OOP practices behind it are valid. But I can't figure out how to
> accomplish the same thing in Flex, I keep running into compiler
> issues. The example is a condensed version of something I'm working
> on, for simplicity sake.
>
> Let's say you have a bunch of events that all have some common
> functionality, like the ability to have a nextEvent. Also, a subset
> of those events also have additional functionality, they can be
> filtered by a type of criteria. We'll call them search events.
>
> Now, there are some parts of the application that can work with any
> type of search event, and any type of criteria. But when the
> individual searches are executed, that implementation expects a
> specific type of search event and search criteria. That's my end goal
> here.
>
> Here are the interfaces I'm using:
>
> public interface ICriteria
> {
> // just a marker
> }
>
> public interface ICustomCriteria extends ICriteria
> {
> function get name():String;
> function set name(name:String):void;
> }
>
> public interface IEvent
> {
> function get nextEvent():IEvent;
> function set nextEvent(event:IEvent):void;
> }
>
> public interface ISearchEvent
> {
> function get criteria():ICriteria;
> function set criteria(criteria:ICriteria):void;
> }
>
> So far, so good. And now the implementing classes:
>
> // would like to make this an abstract class, but not supported in AS
> public class BaseEvent implements IEvent
> {
> private var _nextEvent:IEvent;
>
> public function set nextEvent(event:IEvent):void
> {
> this._nextEvent = event;
> }
>
> public function get nextEvent():IEvent
> {
> return this._nextEvent;
> }
> }
>
> // would like to make this an abstract class, but not supported in AS
> public class BaseSearchEvent extends BaseEvent implements ISearchEvent
> {
> private var _criteria:ICriteria;
>
> public function set criteria(criteria:ICriteria):void
> {
> this._criteria = criteria;
> }
>
> public function get criteria():ICriteria
> {
> return this._criteria;
> }
> }
>
> Those base classes are fine and compile correctly. Now if you
> remember from the requirements, there are some places that can work
> with any type of ISearchEvent, and some places that can only work with
> an individual subclass. Here is where the compiler errors come in.
> Doing what I am about to do works in Java, and I'm wondering if there
> is a way to accomplish it in AS3.
>
> public class CustomSearchEvent extends BaseSearchEvent
> {
> private var _criteria:ICustomCriteria;
>
> public override function get criteria():ICustomCriteria
> {
> return this._criteria;
> }
>
> public override function set criteria(criteria:ICustomCriteria):void
> {
> this._criteria = criteria;
> }
> }
>
> The above class does not compile because the method signatures for
> get/set criteria are different than those specified in the interface.
> But from an OO perspective, I think this is a valid thing to want to
> do. If you're working with an ISearchEvent instance, you should be
> able to subclass the base class and provide custom behavior. The
> ICustomCriteria is a subclass of ICriteria, so you should be able to
> substitute them in this context. Is there another way to accomplish
> this? Or is this just a language feature that's not there?
>
> 

 

Reply via email to