Synchronized methods in D2

Jacob Carlborg doob at me.com
Sun Sep 5 07:31:09 PDT 2010


On 2010-09-04 21:06, Era Scarecrow wrote:
>> 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

If a private method works then that might be the solution, thanks.


-- 
/Jacob Carlborg


More information about the Digitalmars-d-learn mailing list