2013-03-11 49 views
0

逃脫這是我收集:如何從ClassCastException異常

db.power.find().pretty() 
{ 
     "_id" : ObjectId("513e4022cc6d8d7ff2c83239"), 
     "Indicator" : "One", 
     "sex" : "male" 
} 

如何從ClassCastException逃脫?

import java.net.UnknownHostException;  
import com.mongodb.BasicDBObject; 
import com.mongodb.DB; 
import com.mongodb.DBCollection; 
import com.mongodb.Mongo; 

public class Test {  
    public static void main(String args[]) throws UnknownHostException { 
     Mongo mongo = new Mongo(); 
     DB db = mongo.getDB("at"); 
     DBCollection testdata = db.getCollection("power"); 

     BasicDBObject query = new BasicDBObject(); 
     query.put("Indicator", "One"); 

     PowerData data = (PowerData) testdata.findOne(query); 

     System.out.println(data.getSize()); 
    }  
} 

import com.mongodb.BasicDBObject;  

public class PowerData extends BasicDBObject{  

    public String getSize() { 
     return (String) get("sex"); 
    } 

    public void setSize(String sex) { 
     put("sex", sex); 
    }  

    public String getIndicator() { 
     return (String) get("Indicator"); 
    } 

    public void setIndicator(String Indicator) { 
     put("Indicator", Indicator); 
    } 

    public String getId() { 
     return (String) get("_id"); 
    } 

    public void setId(String _id) { 
     put("_id", _id); 
    } 
} 

在線程異常 「主要」 java.lang.ClassCastException:com.mongodb.BasicDBObject不能Test.main被轉換爲PowerData (Test.java:19)

+0

您正試圖將BasicDBObject強制轉換爲擴展BasicDBObject的對象。這是無效的,因爲BasicDBObject不是一個PowerData對象(如果你試圖將一個實例化的PowerData轉換爲BasicDBObject,那很好)。您可以實例化並將PowerData對象傳遞給findOne()而不是BasicDBObject。 – 2013-03-11 20:52:30

+0

謝謝,我將PowerData對象傳遞給findOne(),但仍得到相同的ClassCastExcetion。 – Pawan 2013-03-11 20:57:37

+0

這是一個Java問題,而不是mongoDB問題,順便說一句。您可能想要修復問題上的標籤。 – 2013-03-11 23:26:29

回答

-1

你可以改變你PowerData類是這樣的:

public class PowerData extends BasicDBObject{ 

    private BasicDBObject wrapped; 

    public PowerData(BasicDBObject o) { 
    this.wrapped = o; 
    } 

    public String getSize() { 
    return (String) o.get("sex"); 
    } 

    public void setSize(String sex) { 
    o.put("sex", sex); 
    } 

    public String getIndicator() { 
    return (String) o.get("Indicator"); 
    } 

    public void setIndicator(String Indicator) { 
    o.put("Indicator", Indicator); 
    } 

    public String getId() { 
    return (String) o.get("_id"); 
    } 

    public void setId(String _id) { 
    o.put("_id", _id); 
    } 
} 

而在你main方法,具有以下取代PowerData data = (PowerData) testdata.findOne(query);

PowerData data = new PowerData(testdata.findOne(query)); 
+0

uhhhhhh不這樣做只是因爲它的工作.... – 2013-04-26 14:53:45