球员, Java Dynamic类加载有一个稍微不同的问题。我必须将一个对象(比如A类的Object A1)传递给B类的另一个对象B1的构造函数,这样A1的细节就存储在B1中。 B1不知道它接收的是什么类型的对象。所有它知道的是A1是一个对象。
现在我在B类中有函数,它接受对象C1并检查它是否等于Object A1。所以基本上我必须检查
我尝试了一个解决方案:
当在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
此问题还存在其他问题。让我用以下评论更新它。我现在必须比较C1和A1中的一个值,比如说AGE,它在B1里面。现在我该怎么做?如果我尝试函数或值,我会给我编译错误,因为编译器仍然忘记了对象C1和A1的类类型
此外,我可以首先保存X1而不是A1。现在我可能需要检查像ADDRESS这样的不同属性检查。这大大改变了问题的维度。
答案 0 :(得分:4)
instanceof
运算符仅适用于静态加载的类。对于动态加载的类,请使用isInstance
类上的Class
方法。
if (class11.isInstance(C1)) {
// do something
}
答案 1 :(得分:2)
使用Class.isInstance()
代替instanceof
运算符:
if (c.isInstance(C1)) {
[...]
}
注意:
instanceof
运算符只能用于类型(在编译时已知)。 isInstance()
个对象上调用java.lang.Class
方法。答案 2 :(得分:1)
instanceof cunstruction需要type,而不是类对象的引用:
if ( C1 instanceof MyClass ) {
// ...
}
您可以使用:
if (c.isnstance(C1)) {
// ...
}