2015-02-11 99 views
0

面向對象編程Java誰能解釋爲什麼這會一直拋出一個錯誤?

比較遺憾的是缺乏透明度。

我們的老師給了我們這個例子一個單身人士和工廠模式程序結合,但是當我在java中運行它時,它一直告訴我,來自Expectan的類不存在。我在eclipse中逐字逐句地重新輸入了它,並且檢查了不同的東西,它是同一個文件中的一個程序。

  • 問題:

    我得到一個錯誤消息說,即使當它的類不存在。 好吧,這是每個屏幕截圖的pdf文檔是一個頁面。所以,如果我輸入到主掃描器我會得到fromExperian類不存在,或者fromTransUnion類不存在等

看起來它找不到類,即使他們在同一個文件中?

page 1 page 2 page 3
page 4 page 5 page 6

+0

什麼錯誤?在哪一行? – LeeNeverGup 2015-02-11 16:28:42

+5

無關的主題:建議您始終使用以UpperCase開頭的類名稱,以lowerCase開頭的方法 - 這是Java約定,並且看到使用小寫名稱的類會感到困惑 – 2015-02-11 16:30:27

+0

PF.getPenColor();我看了看,直到我在main中運行這條線時,錯誤才顯示出來。 – bp01442 2015-02-11 16:31:14

回答

2

您的代碼適用於我。但只有它存在於默認包

您必須使用Class.forName(...)與規範類的名稱。所以只要你不在默認包中,你的錯誤就會發生。

penCheck = (pen)Class.forName(s).newInstance(); 

如果您的課程不在默認包中,將導致您的錯誤。

penCheck = (pen)Class.forName(fromExperian.class.getCanonicalName()).newInstance(); 

反而會一直工作。

它也適用於fromExperian是抽象的。

+1

如果你已經有了這個類,調用'newInstance'有什麼意義?爲什麼不簡單地做一個'fromExperian()'?這使得代碼無關緊要。 – 2015-02-11 16:46:45

+1

這是沒有道理的。作者沒有這個類,但是輸入了一個字符串的類名。在我的例子中,我只使用這個類來顯示它只要使用完整的類名(包括包)就可以工作。 – pommes 2015-02-11 16:51:29

2

當你的公司設置爲Experian,然後嘗試實例化fromExperian類。那不可能發生,因爲fromExperian是抽象的。

您必須通過移除抽象關鍵字來創建您的fromExperian類,或創建至少一個名爲(該名稱以「from」開頭)的具體類,該類擴展fromExperian並相應地設置公司名稱。

+0

對不起,這兩門課在原始決賽中都是具體的,這是我解決問題的方法。 – bp01442 2015-02-11 16:34:58

0

我不確定你的文件在哪裏。確保你所有的.java文件都在適當的位置。我不知道細節,但是當你遇到這種錯誤時,我相信這是因爲JVM找不到編譯器應該做出的.class文件。當你編譯它時,檢查你的類路徑,並確保所有的東西都在正確的包中,而不是。你的single_factory_pattern.class或fromExperian.class是罪魁禍首。

+0

所有文件都位於同一頁面上的一個文件中。 – bp01442 2015-02-11 16:37:44

+0

儘管哪個文件?在默認包?無論哪種方式pommes得到你的答案,我相信。 – IByrd 2015-02-11 16:47:15

相關問題