Help with Java Generics: Cannot use "Object" as argument for "? extends Object"
Posted
by
AniDev
on Stack Overflow
See other posts from Stack Overflow
or by AniDev
Published on 2010-12-28T04:10:30Z
Indexed on
2010/12/28
4:54 UTC
Read the original article
Hit count: 245
Hello,
I have the following code:
import java.util.*;
public class SellTransaction extends Transaction {
private Map<String,? extends Object> origValueMap;
public SellTransaction(Map<String,? extends Object> valueMap) {
super(Transaction.Type.Sell);
assignValues(valueMap);
this.origValueMap=valueMap;
}
public SellTransaction[] splitTransaction(double splitAtQuantity) {
Map<String,? extends Object> valueMapPart1=origValueMap;
valueMapPart1.put(nameMappings[3],(Object)new Double(splitAtQuantity));
Map<String,? extends Object> valueMapPart2=origValueMap;
valueMapPart2.put(nameMappings[3],((Double)origValueMap.get(nameMappings[3]))-splitAtQuantity);
return new SellTransaction[] {new SellTransaction(valueMapPart1),new SellTransaction(valueMapPart2)};
}
}
The code fails to compile when I call valueMapPart1.put
and valueMapPart2.put
, with the error:
The method put(String, capture#5-of ? extends Object) in the type Map is not applicable for the arguments (String, Object)
I have read on the Internet about generics and wildcards and captures, but I still don't understand what is going wrong. My understanding is that the value of the Map
's can be any class that extends Object, which I think might be redundant, because all classes extend Object. And I cannot change the generics to something like ? super Object
, because the Map
is supplied by some library.
So why is this not compiling? Also, if I try to cast valueMap
to Map<String,Object>
, the compiler gives me that 'Unchecked conversion' warning.
Thanks!
© Stack Overflow or respective owner