1

伙计们,我在 Java 动态类加载方面遇到了一个稍微不同的问题。我必须将一个对象(比如说 A 类的对象 A1)传递给 B 类的另一个对象 B1 的构造函数,以便 A1 的详细信息存储在 B1 中。B1 不知道它正在接收什么样的对象。所以它只知道 A1 是一个对象。

现在我在 B 类中有函数,它接受对象 C1 并检查它是否等于对象 A1。所以基本上我必须检查

  1. 如果对象 C1 也是 A 类的类型。(实际上我还没有超过这一点。)
  2. 如果对象内部的值相同

我尝试了一个解决方案:

将对象 A1 存储在 B1 中时,我还存储了类“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。这极大地改变了问题的维度。

4

3 回答 3

4

instanceof运算符仅适用于静态加载的类。对于动态加载的类,使用类isInstance上的方法Class

if (class11.isInstance(C1)) {
    // do something
}
于 2010-10-25T06:25:05.500 回答
2

使用Class.isInstance()代替instanceof运算符:

if (c.isInstance(C1)) {
    [...]
}

笔记:

  • instanceof运算符只能用于类型(在编译时已知)。
  • isInstance()方法在java.lang.Class对象上调用。
于 2010-10-25T06:25:36.337 回答
1

instanceof cunstruction 需要类型,而不是对类对象的引用:

if ( C1 instanceof MyClass ) {
  // ...
}

您可以使用:

if (c.isnstance(C1)) {
  // ...
}
于 2010-10-25T06:29:12.630 回答