Connecting Tech Pros Worldwide Help | Site Map

Generics references

  #1  
Old May 28th, 2007, 06:35 PM
jupiter
Guest
 
Posts: n/a
I've noticed that the type in generic declarations is not
"inherited" by new references to the object. This seems
inconsistent to me but maybe there's a good reason for it. To wit:

ArrayList<Stringlist1 = new ArrayList<String>();

ArrayList list2 = list;

list1.add(new Integer(3)); //compiler catches it as expected.
list2.add(new Integer(3)); //compiler is fat, dumb and happy.

I thought the idea of a reference was to point to the original
object and pick up all of the relevant data. Why not type?




  #2  
Old May 29th, 2007, 06:05 PM
Mark Rafn
Guest
 
Posts: n/a

re: Generics references


jupiter <jupiter49byebyeSpam@msn.comwrote:
Quote:
>I've noticed that the type in generic declarations is not
>"inherited" by new references to the object. This seems
>inconsistent to me but maybe there's a good reason for it.
Type inference is intentionally weaker than it could be. There are good
reasons for it, I suspect, but it annoys me sometimes.

To wit:
Quote:
>ArrayList<Stringlist1 = new ArrayList<String>();
>ArrayList list2 = list;
List2 is explicitly NOT declared as a parameterized type. It happens to have
an ArrayList<Stringin it now, but you could assign it an ArrayList<Object>
later without error.
Quote:
>list1.add(new Integer(3)); //compiler catches it as expected.
>list2.add(new Integer(3)); //compiler is fat, dumb and happy.
Right, because you told it to be.
Quote:
>I thought the idea of a reference was to point to the original
>object and pick up all of the relevant data. Why not type?
Type is tricky. It's both a property of the variable and a property of the
referent. The object type can be more specific than the variable, and that's
how polymorphism works.

Note the similarity to:
LinkedList list1 = new LinkedList();
List list2 = list1;
list1.addFirst("first"); // allowed, addFirst is a method on LinkedList
list2.addFirst("first"); // disallowed, addFirst is NOT on the List interface
--
Mark Rafn dagon@dagon.net <http://www.dagon.net/>

  #3  
Old May 30th, 2007, 01:45 AM
jupiter
Guest
 
Posts: n/a

re: Generics references



"Mark Rafn" <dagon@dagon.netwrote in message
news:csvti4-qj1.ln1@hydra.dagon.net...
Quote:
jupiter <jupiter49byebyeSpam@msn.comwrote:
Quote:
>>I've noticed that the type in generic declarations is not
>>"inherited" by new references to the object. This seems
>>inconsistent to me but maybe there's a good reason for it.
>
Type inference is intentionally weaker than it could be. There
are good
reasons for it, I suspect, but it annoys me sometimes.
>
To wit:
Quote:
>>ArrayList<Stringlist1 = new ArrayList<String>();
>>ArrayList list2 = list;
>
List2 is explicitly NOT declared as a parameterized type. It
happens to have
an ArrayList<Stringin it now, but you could assign it an
ArrayList<Object>
later without error.
>
Quote:
>>list1.add(new Integer(3)); //compiler catches it as expected.
>>list2.add(new Integer(3)); //compiler is fat, dumb and happy.
>
Right, because you told it to be.
>
Quote:
>>I thought the idea of a reference was to point to the original
>>object and pick up all of the relevant data. Why not type?
>
Type is tricky. It's both a property of the variable and a
property of the
referent. The object type can be more specific than the
variable, and that's
how polymorphism works.
>
Great piece of insight, Mark. I never differentiated between type
and other properties, so this is nice piece to become aware of.

Quote:
Note the similarity to:
LinkedList list1 = new LinkedList();
List list2 = list1;
list1.addFirst("first"); // allowed, addFirst is a method on
LinkedList
list2.addFirst("first"); // disallowed, addFirst is NOT on the
List interface
Nice example indeed. This is yet another case of how implicit
casting can cause headaches for we normally-brained people.



Closed Thread


Similar Threads
Thread Thread Starter Forum Replies Last Post
Generics problem accessing static field NamelessNumberheadMan answers 2 January 14th, 2009 07:43 PM
Serializing generic objects with circular references Lapu-Lapu answers 2 June 13th, 2006 10:25 PM
Seriuos monkey business with static generics Ole Nielsby answers 1 April 5th, 2006 04:25 PM
Whidbey C# Generics/Iterators Question Kamen Yotov answers 1 November 15th, 2005 09:22 PM