2013-03-11 74 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