首页 > 解决方案 > 通过包中的类型转换接口 ref 变量访问类对象

问题描述

我正在尝试使用 forName() 和 newInstance() 内置方法来提供将为其创建对象的类的名称,接口 ref 变量将指向该类。但是编译器不断抛出异常:

Exception in thread "main" java.lang.ClassNotFoundException: fclas
  at java.net.URLClassLoader.findClass(Unknown Source)
  at java.lang.ClassLoader.loadClass(Unknown Source)
  at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
  at java.lang.ClassLoader.loadClass(Unknown Source)
  at java.lang.Class.forName0(Native Method)
  at java.lang.Class.forName(Unknown Source)
  at primary.main(primary.java:12) 

正常的引用变量声明,即

 inter1 obj = new fclass();

&

 inter1 obj = new sclass();

似乎工作得很好。

任何帮助将不胜感激 TY。

==================================================== ===========

包中的接口——program-1

package pack1;    //the interface in the package

public interface inter1
{
void print1();
void print2();
}

==================================================== ======

//实现接口类1--program-2

package pack1;
import pack1.inter1;   // the 1st implementation class
import java.io.*;

public class fclass implements inter1
{

      //method bodies

}

==================================================== ========

//实现接口类2--program-3

package pack1;
import pack1.inter1;     // the 2nd implementation class
import java.io.*;

public class sclass implements inter1
{

   //method bodies

}

==================================================== =======

// 主方法 -- 程序 4

import pack1.fclass;
import pack1.sclass;
import pack1.inter1;    // the main program
import java.io.*;
import java.util.*;

class primary
{
    public static void main(String args[]) throws Exception
    {
    String s1 = "fclass";
    Class c = Class.forName(s1);         //THESE 2 LINES R THE PROBLEM
    inter1 obj1 = (inter1)c.newInstance(); // THESE 2 LINES R THE PROBLEM
    obj1.print1();
    obj1.print2();
    inter1 obj = new sclass();    // THIS FORMAT WORKS FINE
    obj.print1();
    obj.print2();
    System.out.println("end..........");
    }
}

我期待这个输出:

i am print 1 method of package pack1 in fclass
i am print 2 method of package pack1 in fclass
i am print 1 method in package pack1 of sclass
i am print 2 method in package pack1 of sclass
end..........

标签: java

解决方案


您需要提供完整的班级名称:

String s1 = "pack1.fclass";

推荐阅读