2012-11-27 72 views

回答

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類中的任何函數的類。如果你想實現的接口你就必須提供一些容器類存儲鳴叫屬性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來存儲其屬性。

+0

但是,我從BasicDBObject擴展,你將無法做到: Tweet myTweet =(Tweet)collection.findOne(); – xybrek

+0

答案沒有解決他如何實現接口的問題 – thaspius

+0

添加了一個簡單的實現。 –