1

我试图更改通用地图

private final Map<String, Object> dataObject;

private final Map<String, ?> dataObject;

吸气剂从

public Map<String, Object> getDataObject() {
  return dataObject;
}

public Map<String, ?> getDataObject() {
  return dataObject;
}

但二传手:

public void addDataObject(final String key, final Object value) {
  dataObject.put(key, value);
}

不能毫无错误地配置任何想法?还是我在尝试使用“?”时做错了?通用的

4

3 回答 3

3

参数化你的类而不是使用通配符:

class Container<T> {
  private final Map<String, T> dataObject;

  public Map<String, T> getDataObject() {
    return dataObject;
  }

  public void addDataObject(final String key, final T value) {
    dataObject.put(key, value);
  }

}
于 2012-05-31T11:12:53.253 回答
1

如果地图实际上是一个,Map<String,String>那么你可以打电话addDataObject("key", Integer.valueOf(1972)),那会很糟糕。所以dataObject必须保持原样。您可以更改getDataObject,但这可能无济于事,并且让客户端代码不得不处理通常不受欢迎的通配符。

于 2012-05-31T11:07:15.680 回答
-1

您已经在 dataObject 之前放置了 final 修饰符..您如何使用 set 方法更改 final 变量的值????(不可能违反 final 的定义)。

你可以像这样改变你的代码 -

private final Map<String, ? super Object> dataObject=null;
于 2012-05-31T11:27:49.200 回答