我有一个可序列化的类(CardGame),我正在Eclipse中使用它,并且最初将它放在一个包(x.cardlib)中。我使用Eclipse的重构实用程序将包重命名为y.cards.models(现在我知道如何正确命名包)。
我写了一个新类(CardGameDatabase),它从数据库中下载并转换序列化的CardGames,稍后为它编写了一个新的JUnit测试用例(CardGameDatabaseTest)。我试图运行我的测试用例,并收到以下错误:
java.lang.ClassNotFoundException: x.cardlib.CardGame
at y.cards.database.CardGameDatabase.getGame(CardGameDatabase.java:28)
at y.tests.CardGameDatabaseTest.test(CardGameDatabaseTest.java:13)
我认为我的代码中仍然必须引用旧包,所以我在项目范围内搜索旧包的所有引用(例如“import x.cardlib.CardGame”)。我没找到。
然后我删除了所有已编译的代码并运行了Eclipse的清理实用程序,认为在以前编译的代码中可能存在旧的引用。我仍然收到错误。
(嗯,事实上,我在写作时想出来了。如果其他人遇到这样的问题,我会尽快发布答案。)
答案 0 :(得分:1)
答案:在重构我的代码之前,我已将CardGame存储在我的数据库中。从数据库下载对象后,它仍然在数据库中被称为x.cardlib.CardGame。简而言之,重命名包破坏了我的序列化,导致了ClassNotFoundException。