简单工厂模式拿不到实例?

package site.yanhui.section4;

public interface Fruit {
      public void get();
}
package site.yanhui.section4;

public class Banana implements Fruit {

    @Override
    public void get() {
        System.out.println("采集香蕉");
    }
}
package site.yanhui.section4;


public class FruitFactory {

    /**
     * 获得所有的产品对象
     *
     */

    public  static Fruit getFruit(String type) throws IllegalAccessException, InstantiationException, ClassNotFoundException {

       Class fruit = Class.forName(type);


       return (Fruit) fruit.newInstance();


    }
}
package site.yanhui.section4;

public class MainClass {

    public static void main(String[] args) throws InstantiationException, IllegalAccessException, ClassNotFoundException {

//           Fruit apple = FruitFactory.getFruit("Apple");

        Fruit banana = FruitFactory.getFruit("Banana");
        banana.get();


    }
}

异常:

"C:\Program Files\Java\jdk1.8.0_73\bin\java" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2017.2\lib\idea_rt.jar=7117:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2017.2\bin" -Dfile.encoding=GBK -classpath "C:\Program Files\Java\jdk1.8.0_73\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_73\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_73\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_73\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_73\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_73\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_73\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_73\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_73\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_73\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_73\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_73\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_73\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_73\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_73\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_73\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_73\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_73\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_73\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_73\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_73\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_73\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_73\jre\lib\rt.jar;E:\Workplace\DesignPattern\SimpleFactory\out\production\SimpleFactory" site.yanhui.section4.MainClass
Exception in thread "main" java.lang.ClassNotFoundException: Banana
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:264)
    at site.yanhui.section4.FruitFactory.getFruit(FruitFactory.java:13)
    at site.yanhui.section4.MainClass.main(MainClass.java:9)

Process finished with exit code 1

明明有香蕉类,但是为什么一直报错说没有找到类呢?

阅读 3.1k
2 个回答

输入完整包名+类名试试

为了避免同名类的问题,要精准到包+类,Class.forName(xxx.xx.xx)

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题