java - What is the difference between raw types and generic types in this declaration -
this question has answer here:
- what raw type , why shouldn't use it? 12 answers
what difference between raw types , generic types in declaration
list<integer> list1 = new arraylist<>(); list<integer> list2 = new arraylist();
for these declaration can't do
list1.add("hello"); list2.add("hello");
so difference
on other word benefit of angle brackets in first declaration
when arraylist<>(),
type in angle brackets inferred declaration, resolves arraylist<integer>
@ compile time.
if omit angle brackets, assignment uses raw type, i.e. collection type without information of element type. no type inference done compiler assignment.
both lines not compile:
list1.add("hello") list2.add("hello")
because both list1
, list2
variables declared arraylist<string>
.
the point of specifying <>
assignment of arraylist()
arraylist<string>
should generate compiler warning of unchecked assignment, because compiler can't verify raw typed collection right of =
sign contains integer
s. in simple case such yours, can control correctness of code visually. consider more complex scenario:
arraylist rawlist = new arraylist(); rawlist.add("one"); arraylist<integer> list = rawlist;
here break generic system assigning raw list contains string
typed list variable should contain integer
s. that's compiler warning of unchecked assignment comes in handy.
Comments
Post a Comment