2015-02-11 102 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

相关问题