java - JAVA中动态加载一个类-Anomaly

标签 java dynamic classloader instanceof

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

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

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

我尝试了一个解决方案:

当在 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/

相关文章:

go - 在 Go 中加载动态 yaml 结构

c# - 将嵌套属性动态添加到 ExpandoObject

c# - 从没有反射器/ilspy 的 c# 生成 MSIL 代码

java - 在运行时使用反射将文件添加到类路径的危险

java - hadoop初学者问题

java - RowFilter.regexFilter 多列

java - 用于测试多线程 Java 应用程序的确定性记录/重放框架

java - 无法编辑通过 Class.getResource() 加载的属性文件

java - 在 OSGi 框架中使用 Esper

java - Android Studio - 平台和插件更新以及 Java @ OSX