We deliberately don't support this kind of thing to keep the IPC protocol simple. You have basically two choices:
1. Use a concrete class type, which will result in ONLY that classes CREATOR being used to unmarshall its data. The protocol does no type inspection here, since that would introduce a lot more overhead to a very common operation. 2. Use a generic Parcelable class type, in which case the marshalling code will inspect the class type, included that in the marshalled data, and use that to re-construct it on the other side. You can also do your trickery in the CREATOR to instantiate multiple types. If you have actually overloaded a method, then yes you will call through to the most derived class. This is purely a Java thing, and it certainly does work; this kind of thing is done in a few places in the system. On Wed, Jul 15, 2009 at 7:11 AM, Bart van Wissen <bartvanwis...@gmail.com>wrote: > > I've run into the following issue: > > Say I have an Animal class, which is parcelable, and I have a Dog > class and a Cat class, which are subclasses of Animal and also > implement Parcelable. > > Say I have a service with the following AIDL interface: > > sendAnimals(List<Animal> animals); > > Now I'm calling this remote interface from some client application, > passing it a List containing Cats and Dogs. What happens now is that > android calls the Cat's and the Dog's writeToParcel() methods at the > client side, but at the server side, the Animal's CREATOR is used, > which calls Animal's readFromParcel() method. > So the right data is sent from the client, but the wrong unmarshalling > code is executed at the server. > > > I have tried to put this in the AIDL file: > > sendAnimals(List<T extends Animal> animals); > > This results in a syntax error from the aidl compiler though. > > My current workaround is as follows: > - In each specific Animal subtype's writeToParcel() method, I write > the class name as a String into the Parcel as the first element. > - In the Animal's CREATOR.createFromParcel() I read the first String > out of the parcel, and based on that I create the appropriate type and > call the appropriate readFromParcel() method. > > I think this is kind of ugly though. I would expect the android > framework to take care of this for me. > > (My application is not actually dealing with animals, this is just to > make it simpler to explain the issue) > > > -- Dianne Hackborn Android framework engineer hack...@android.com Note: please don't send private questions to me, as I don't have time to provide private support, and so won't reply to such e-mails. All such questions should be posted on public forums, where I and others can see and answer them. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to android-developers@googlegroups.com To unsubscribe from this group, send email to android-developers-unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/android-developers?hl=en -~----------~----~----~----~------~----~------~--~---