伙计们, 我在 Java 动态类加载方面遇到了一个稍微不同的问题。我必须将一个对象(假设是 A 类的对象 A1)传递给 B 类的另一个对象 B1 的构造函数,以便 A1 的详细信息存储在 B1 中。 B1 不知道它正在接收什么样的对象。所以它只知道 A1 是一个对象。
现在我在 B 类中有函数,它接受对象 C1 并检查它是否等于对象 A1。所以基本上我必须检查
- 如果对象C1也是类A的类型。(其实我还没有超过这一点。)
- 如果对象内部的值相同
我尝试了一个解决方案:
当在 B1 中存储对象 A1 时,我还存储了类“A”的名称,因为对象 B1 仅获取对象 A1 而不是类名 A。
public static void testing(Object C1, String s) //testing is the function of B called by B1
{
try{
Class c = Class.forName(s);
if( C1 instanceof c) // This is throwing error stating c cannot be resolved to a type
{
//further checking
}
}catch (Exception e){ System.out.println(e);}
}
我一直在尝试不同的代码来获取类类型以进行 instanceof() 比较,但我没有成功。有什么建议吗?
我什至试过这个但是同样的错误
ClassLoader classLoader = B.class.getClassLoader();
try{
Class class11 = classLoader.loadClass(s);
if ( C1 instanceof class11 )
{
}
}catch (Exception e){ System.out.println(e);}
任何关于如何进行的指示都会非常有帮助!
解决方案是使用 : isInstance 而不是 instanceof
这个问题还有其他问题。让我用下面的评论更新它。我现在必须比较 B1 内的 C1 和 A1 中的一个值,比如 AGE。现在我该怎么做?如果我尝试函数或值,我会给我编译器错误,因为编译器仍然忘记了对象 C1 和 A1 的类类型
此外,我本来可以先保存 X1 而不是 A1。现在我可能必须检查不同的属性检查,如 ADDRESS。这极大地改变了问题的维度。
最佳答案
instanceof
运算符仅适用于静态加载的类。对于动态加载的类,请在 Class
类上使用 isInstance
方法。
if (class11.isInstance(C1)) {
// do something
}
关于java - JAVA中动态加载一个类-Anomaly,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4012216/