tags:

views:

175

answers:

5

Possible Duplicate:
Java Generics

To be more specific, whats the role of the <String> in the following line of code?

private List<String> item = new ArrayList<String>();
+7  A: 

Mainly to allow the compiler to raise an error if you don't insert the right kind of data into the list or if you expect data of the wrong type from the list at the moment of extraction

But see the generics tutorial for an explanation: http://java.sun.com/j2se/1.5.0/docs/guide/language/generics.html

Silvio Donnini
+4  A: 

It means that the list can only contain items of the String type. It can't contain items of Number, SomeObject, WhateverType types.

It's called Generics. In Java, it's actuallty compile time syntactic sugar to make the code more robust without the risk for ClassCastException and consorts on retrieving the list items during runtime. You can find here a Sun tutorial on the subject, it also explains the reasoning behind the move to Generics.

BalusC
It does **not** mean that the list 'can only contain' the type. It means that you've asked the compiler to give you an error if you use obvious means to store a non-String. At runtime, type erasure is in effect, and anything goes.
bmargulies
@bmargulies: Yes, it's indeed just compile time syntactic sugar as said in 2nd paragraph :)
BalusC
I'm apparently hypersensitive about leading the response with the language which might mislead. I do see your point about paragraph 2.
bmargulies
+3  A: 

Thats Generics - allowing the compiler to keep track of what is inside lists etc. Notoriously tricky in Java.

Here is an excellent description: http://www.infoq.com/resource/articles/bloch-effective-java-2e/en/resources/Bloch_Ch05.pdf

Thorbjørn Ravn Andersen
+1 for Bloch link
OscarRyz
+3  A: 

Those are generics and where introduced on the v1.5 of Java

They allows you to provide compile time check of the class being used.

You can read the declaration:

private List<String> item = new ArrayList<String>();

As:

 private List of Strings named item initialized with an ArraysList of Strings

So, if you attempt to put something that's not a String you'll get a compile time exception:

 private List<String> items = new ArrayList<String>();
 ... 
 items.add( new Date() ); // fails at compilation time

When you get something from that list you'll get a list

 private List<String> item = new ArrayList<String>();
 ...
 items.add( "Hello" );
 String s = items.get(0);// returns 

To use different classes you provide a different type:

 private List<Date> dates = new ArrayList<Date>();

And now you can only use Dates with that collection.

OscarRyz
A: 

The reason for your this new Java Edition after JDK 1.5 or later as it gives more ease to the programmer as it allow type safety at compile type only. The million dollar question is why it is needed so? The answer is let say you have List in which you want to add integer type objects only into it like below

List list = new ArrayList();
list.add(new Integer(5));

but by mistake you add String object into it.

list.add("Test");

Now in you other code you are using this list assuming that all values are integer

(Integer)list.get(2);

this will give error at run time, so to avoid this it is better to defined your list at declaration part like list and it will not allow you to add string object to you.

Shashank T