http://www.mongodb.org/display/DOCS/Java+-+Saving+Objects+Using+DBObject
此页面是关于在MongoDB中保存和检索对象的。但是在实现DBObject之后,我必须覆盖一堆方法。有谁知道如何实现PUT方法,以便“myTweet.put(”user“,userId);”可以工作吗?
答案 0 :(得分:4)
而不是实施DBObject只是扩展BasicDBObject
class Tweet extends BasicDBObject {
public Tweet() {
super();
}
public Tweet(BasicDBObject base) {
super();
this.putAll(base);
}
}
Tweet myTweet = new Tweet();
myTweet.put("user", userId);
BasicDBObject实现DBObject所以扩展它的类可以传递给任何需要实现DBObject
的类的函数。如果你想实现接口,你必须提供一些容器类来存储tweet属性BasicDBObject通过扩展另一个名为BasicBSONObject
的类来实现这一点,你可以在source中看到,一个简单的实现看起来像这样:
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import org.bson.BSONObject;
import com.mongodb.DBObject;
public class Tweet implements DBObject {
private Map<String, Object> data;
private boolean partial;
public Tweet() {
data = new HashMap<>();
partial = false;
}
@Override
public Object put(String key, Object value) {
return data.put(key, value);
}
@SuppressWarnings("unchecked")
@Override
public void putAll(BSONObject o) {
data.putAll(o.toMap());
}
@SuppressWarnings({ "rawtypes", "unchecked" })
@Override
public void putAll(Map m) {
data.putAll(m);
}
@Override
public Object get(String key) {
return data.get(key);
}
@SuppressWarnings("rawtypes")
@Override
public Map toMap() {
return data;
}
@Override
public Object removeField(String key) {
return data.remove(key);
}
@Override
public boolean containsKey(String key) {
return data.containsKey(key);
}
@Override
public boolean containsField(String key) {
return data.containsKey(key);
}
@Override
public Set<String> keySet() {
return data.keySet();
}
@Override
public void markAsPartialObject() {
partial = true;
}
@Override
public boolean isPartialObject() {
return partial;
}
}
此类实现DBObject
并使用HashMap
存储它的属性。