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: 305
        
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