2016-04-19 18 views
0

使用MongoDB,我需要保存來自Twitter4J的對象。 Twitter4J使用以JSON版本實現的接口。示例:如何訪問Twitter4J的Impl類?

API返回Status(接口),並且Status實現爲StatusJSONImpl

我不能將Status保存到MongoDB,我需要實現StatusJSONImpl

我的問題是,這個類StatusJSONImpl不公開(see here),所以我不能在我的代碼中使用它。我試圖下載Twitter4J源手動添加「public」到StatusJSONImpl:我可以這樣做:

Status status = twitter.updateStatus(latestStatus);  
String statusStringified = TwitterObjectFactory.getRawJSON(status); 
StatusJSONImpl statusImplemented = (StatusJSONImpl) TwitterObjectFactory.createUserList(statusStringified); 
SingletonLaunchDB.getMongo().save(statusImplemented); 

但我仍然在運行時得到類StatusJSONImpl一個java.lang.IllegalAccessError

我從other SA answers看到用戶經常將其他用戶指向這個Impl類......他們如何在代碼中使用它?

非常感謝您的幫助。

回答

0

狀態是可序列化的。要從statusStringified恢復StatusJSONImpl,您可以編寫。

JSONObject json = new JSONObject(statusStringified); 
Status status = new StatusJSONImpl(json); 

的代碼示例是從StatusSerializationTest.java

我希望這有助於。

+0

無用我很抱歉。我如何獲取狀態對象的細節是不相關的,我不從命令行運行我的代碼,因此無論如何我都不需要參數[0]。是的,我可以重新實現一批Twitter4J的類,但是我的問題是關於如何避免這種錯位的努力 - 必須有更好的方法。 – seinecle

+0

@seinecle我更新了答案,請查看。 –

+0

它澄清,非常感謝!但是,您提到的StatusSerializationTest.java類與StatusJSONImpl位於同一個包內,這就是爲什麼它可以訪問它。我的代碼當然是位於Twitter4J之外,所以無法訪問StatusJSONImpl。有沒有一個明顯的解決辦法呢? – seinecle