> I'm currently porting a D1 code base to D2 which has the
> following class 
> hierarchy:
> 
> interface Map
> {
>       void clear ();
> }
> 
> class Hashtable : Map
> {
>      synchronized void clear () {};
> }
> 
> class HashMap : Map
> {
>      void clear () {};
> }
> 
> When I compiler the code I get an error about the "clear"
> method in 
> Hashtable not being covariant with the "clear" method in
> Map. Any 
> suggestions how I could solve this, preferable working in
> D1 as well?
> 
> -- 
> /Jacob Carlborg

  I remember reading about this; The signatures have to match EXACTLY for it to 
work. The interface is a declaration of a contract, of what it expects. If a 
part of the contract is broken, an error tells you where to fix it.

 Even if technically it would be compatible, the compiler and type checking 
won't allow it. So either synchronize your interface as well, or drop it from 
the implementation.

 A third option, is to match the declaration, and have a private function that 
is synchronized that is called from clear. At least, i believe this is right.

 Era



Reply via email to