Jeff

Jeff

  • NA
  • 3
  • 0

Dynamic validation of generic method implementaions

Jan 17 2008 4:35 PM

I have run across this issue plenty of times. I write up this sexy abstract design only to be reminded of this limitation with generics (it's present in Java as well):

interface IData {
    void insert<D>(List<D> list) where D : IData;
}

class Foo : IData {
    void insert(List<Foo> list) {  }
}


the implemented insert SHOULD satisfy the interface insert method (IMO) but it doesn't. I guess the general rule is for the compilers to look for an exact signature rather than a method that fulfills the requirements of the generic method. One cute way to get around this is with:

abstract AData {
    void insert<D>(List<D> list) where D : AData {
        insert(list);
    }
}

class Foo : AData {
    void insert(List<Foo> list) { ...  }
}


This however is a little dangerous, because I have no way to force the implementation of the concrete insert method. You could also cast to Foo in the implementation, but that creates a whole new set of possible complications.

It could be that this somehow doesn't fall with in the scope of generics. And maybe there is a plausable solution elsewhere in the language.. Dunno.


Answers (3)