java


Error when doing a put operation into an HashMap<Integer,?> [duplicate]


I've read a few topics which cover certain questions about generics, such as their relationship with raw types. But I'd like an additional explanation on a certain line found in the Java SE tutorial on unbound generics .
According to a sentence :
The goal of printList is to print a list of any type, but it fails to achieve that goal — it prints only a list of Object instances; it cannot print List<Integer>, List<String>, List<Double>, and so on, because they are not subtypes of List<Object>.
If I understand well this sentence; the difference between List<?> and List<Object>, is that we can use the type argument List<String> or List<Integer> by implementing the former. While if we implement the later, we can only use the type argument List<Object>. As if List<?> is an upper bound to Object namely List<? Object>.
But then the following sentence confuses me, in the sense that according to what I previously understood, List<Object> should only contain instances of the class Object and not something else.
It's important to note that List<Object> and List<?> are not the same. You can insert an Object, or any subtype of Object, into a List<Object>. But you can only insert null into a List<?>.
There are two separate issues here. A List<Object> can in fact take any object as you say. A List<Number> can take at least Number objects, or of course any subclasses, like Integer.
However a method like this:
public void print(List<Number> list);
will actually only take a List which is exactly List<Number>. It will not take any list which is declared List<Integer>.
So the difference is List<?> will take any List with whatever declaration, but List<Object> will only take something that was declared as List<Object>, nothing else.
The last quote simply states, that List<?> is a list for which you literally don't know what type its items are. Because of that, you can not add anything to it other than null.
The sentence that is confusing you is trying to warn you that, while List<?> is the super-type of all generic lists, you cannot add anything to a List<?> collection.
Suppose you tried the following code:
private static void addObjectToList1(final List<?> aList, final Object o ) {
aList.add(o);
}
private static void addObjectToList2(final List<Object> aList, final Object o ) {
aList.add(o);
}
private static <T> void addObjectToList3(final List<T> aList, final T o ) {
aList.add(o);
}
public static void main(String[] args) {
List<String> testList = new ArrayList<String>();
String s = "Add me!";
addObjectToList1(testList, s);
addObjectToList2(testList, s);
addObjectToList3(testList, s);
}
addObjectToList1 doesn't compile, because you cannot add anything except null to a List<?>. (That's what the sentence is trying to tell you.)
addObjectToList2 compiles, but the call to it in main() doesn't compile, because List<Object> is not a super type of List<String>.
addObjectToList3 both compiles and the call works. This is the way to add elements to a generic list.

Related Links

RDF-Gravity 1.0 - unable to launch the application
Keep out of reach of Children: Removing protected fields from inheritance
Android - Creating txt file in sdcard [duplicate]
Primefaces updates
if and else statement not working if statement works else statement dosent [duplicate]
JPA: Create multiple parent, single child relationship on GAE
How to clone JsonObject (shadow and deep) following JSR-353 (JSON-P) spec
How to calculate valid number of combinations, given a two array list? [duplicate]
Android SQL - Using a cursor to select a value error
executeBatch Exception Handling
Counting objects using Static [closed]
XML processing instructions
Creating a button grid
Writing for loops/while loops?
onClick and setOnClickListener() cause my app to unfortunately stop
SuperDevMode over regular GWT Dev Mode

Categories

HOME
multithreading
openmp
amazon-ec2
deezer
google-api-php-client
syntax
electronics
c#-2.0
flyway4
convolution
portia
here-api
google-cloud-spanner
alignment
orchardcms
ups
systemc
apache-metamodel
propel
http-status-code-504
dbext
emulator
grails3
kvc
google-search-api
telerik-reporting
zurb-foundation-6
dxf
qhull
fluentvalidation
procdump
semantic-versioning
airconsole
http-get
force-layout
picasso
hexo
fusionpbx
automake
gesture
android-fingerprint-api
leading-zero
temporary-files
user-controls
quadratic-programming
nomethoderror
thin
sas-jmp
angular2-meteor
dotcover
theming
python-c-api
return-value
aurelia-validation
magma
typed-lambda-calculus
eventkit
parallel-data-warehouse
hill-climbing
qgraphicsview
hexdump
uid
jfugue
hsv
cartesian-product
fouc
purge
dukescript
emailrelay
sortedlist
bridge.net
nsmutabledictionary
document-classification
java.nio.file
.aspxauth
batterylevel
android-screen-support
drools-planner
clipper
kyotocabinet
specification-pattern
jquery-knob
quickdialog
rdoc
broken-links
datawindow
pysimplesoap
enter
netbeans-6.9
buildr
netdna-api
coredump
cinema-4d
xtype
locationlistener
lpeg
bespin
database-management
temporal-database

Resources

Encrypt Message