https://bugzilla.novell.com/show_bug.cgi?id=633376

https://bugzilla.novell.com/show_bug.cgi?id=633376#c1


Jonathan Pryor <[email protected]> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |[email protected]

--- Comment #1 from Jonathan Pryor <[email protected]> 2010-08-24 20:07:30 UTC 
---
This is trickier than I originally thought.

The problem is that we're not generating Invoker subclasses for generic wrapper
types.  These are needed so that Android.Runtime.Extensions.JavaCast<T>() can
create a non-abstract type at runtime of the appropriate target type.  (Thus,
if an instance of the abstract AdapterView<T> is needed, JavaCast<T>() would
create an AdapterViewInvoker<T>.)

The reason why we're not generating it is because it's tricky; we'd need to get
this to compile:

  namespace Java.Util {
    public abstract class Dictionary : Java.Lang.Object {
      public abstract Java.Lang.Object Get (Java.Lang.Object key);
    }

    public abstract class Dictionary<K,V> : Dictionary {
      public abstract V Get (K key);
    }

    internal class DictionaryInvoker<K,V> : Dictionary<K,V> {
      // Ruh-roh!  How do we override both Dictionary.Get() AND
      // Dictionary<K,V>.Get()?
      // ...
      // We don't. :-/
    }
  }

(OK, because of #634125 Get() isn't currently abstract, but it should be.)

Thus is the flaw in trying to mimic Java "raw types" -- it leads to
"impossible" C# code (or at least code in bad form).

One *possible* solution would be to drop the entire idea of exposing raw types
in the first place (e.g. dump Java.Util.Dictionary), only expose generic types
(Java.Util.Dictionary<K,V>), and then things are ~sane.  Then if you REALLY,
REALLY needed to make use of Java's raw type functionality, you could use
Extensions.JavaCast<T>().

Michael: thoughts?

-- 
Configure bugmail: https://bugzilla.novell.com/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.
_______________________________________________
mono-bugs maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-bugs

Reply via email to