java - 通过包中的类型转换接口 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..........
解决方案
您需要提供完整的班级名称:
String s1 = "pack1.fclass";
推荐阅读
- ios - textureGrad 函数 – 等效金属 (MSL)
- jquery - 使用 jQuery/getClientRects() 检测元素是否包装
- javascript - 如何在 react js. 中从 .js 文件中导入容器组件,以便在其他 .js 文件中用作弹出模式
- python - 使用 RandomizedSearchCV (scikit-learn) 优化隐藏层和神经元的数量 -> 没有不必要的训练?
- c - 如何确定 C 中的变量类型?
- android - Android / 任务 checkDebugAarMetadata 执行失败 / 执行 CheckAarMetadataWorkAction 时发生故障
- java - 如何使用嵌套循环打印数组的元素,这些元素加在一起形成同一个数组的总和?
- python - Flask WTForms,如何为 SelectField 的选项添加附加属性?
- java - 在我的代码中,getArgument 每次都返回 null
- python - 提高 CNN 模型的准确性(陷入非常低的准确性)