Android项目中的不兼容类型错误

时间:2019-01-05 13:54:55

标签: java android

这是一个Android项目。我对Java完全陌生(刚刚开始学习)。如标题中所述,我收到不兼容的类型错误

我在这里附上了相应的方法:

public void init(Map map) {
    this.productIds = new ArrayList();
    try {
        if (map.containsKey("products")) {
            for (Entry<String, Object> "//Error Lies here" entry : ((HashMap) map.get("products")).entrySet()) {
                InAppProduct productId = new InAppProduct();
                productId.productId = ((String) entry.getKey()).toLowerCase();
                HashMap<String, Object> extraValues = (HashMap) entry.getValue();
                if (extraValues.containsKey(ShareConstants.MEDIA_TYPE)) {
                    productId.productType = (String) extraValues.get(ShareConstants.MEDIA_TYPE);
                }
                if (extraValues.containsKey("days")) {
                    productId.days = ((Integer) extraValues.get("days")).intValue();
                }
                this.productIds.add(productId);
            }
            return;
        }
        this.productIds = new ArrayList(ConfigurationFetcher.this.mDefaultsDelegate.getDefaultsInAppPackages());
    } catch (Exception e) {
        e.printStackTrace();
    }
}

错误是:

  

必填Object,但找到Entry <String, Object>

让我知道您是否需要其他代码或任何详细信息。谢谢。

2 个答案:

答案 0 :(得分:0)

map.get("products")).entrySet()是一组产品,每个产品都是Object,而不是Entry <String, Object>

这应该有效:

public void init(Map map) {
    this.productIds = new ArrayList();
    try {
        if (map.containsKey("products")) {
            for (Object entry : ((HashMap) map.get("products")).entrySet()) {
                InAppProduct productId = new InAppProduct();
                productId.productId = ((String) entry.getKey()).toLowerCase();
                HashMap<String, Object> extraValues = (HashMap) entry.getValue();
                if (extraValues.containsKey(ShareConstants.MEDIA_TYPE)) {
                    productId.productType = (String) extraValues.get(ShareConstants.MEDIA_TYPE);
                }
                if (extraValues.containsKey("days")) {
                    productId.days = ((Integer) extraValues.get("days")).intValue();
                }
                this.productIds.add(productId);
            }
            return;
        }
        this.productIds = new ArrayList(ConfigurationFetcher.this.mDefaultsDelegate.getDefaultsInAppPackages());
    } catch (Exception e) {
        e.printStackTrace();
    }
}

答案 1 :(得分:0)

Set是通用类型。它是一个可以包含任何对象的容器。

在您的情况下,您的Set似乎包含Map.Entry<String, Object>个对象,但是由于您未指定任何位置,因此Java假定您的Set包含Object s个(其他所有类都派生自该Java类),并产生不兼容的类型错误

这是您的代码的稍有改动的版本,应该可以使用。

public void init(Map map) {
    this.productIds = new ArrayList();
    try {
        if (map.containsKey("products")) {

            // ***** We now specify the type of object that the Set contains.
            Set<Map.Entry<String, Object>> entrySet = ((HashMap) hm.get("products")).entrySet();

            for (Entry<String, Object> entry : entrySet) {
                InAppProduct productId = new InAppProduct();
                productId.productId = ((String) entry.getKey()).toLowerCase();
                HashMap<String, Object> extraValues = (HashMap) entry.getValue();
                if (extraValues.containsKey(ShareConstants.MEDIA_TYPE)) {
                    productId.productType = (String) extraValues.get(ShareConstants.MEDIA_TYPE);
                }
                if (extraValues.containsKey("days")) {
                    productId.days = ((Integer) extraValues.get("days")).intValue();
                }
                this.productIds.add(productId);
            }
            return;
        }
        this.productIds = new ArrayList(ConfigurationFetcher.this.mDefaultsDelegate.getDefaultsInAppPackages());
    } catch (Exception e) {
        e.printStackTrace();
    }
}