java - 当类名已知时,动态检索给定类的Object类的java对象

标签 java class object

MyInterface.java

publc interface MyInterface{
   void print();
}

Abc.java

public Class Abc implements MyInterface{
          public void print(){
         System.out.print("Inside Abc");
     }
}

Xyz.java

public Class Xyz implements MyInterface{
          public void print(){
         System.out.print("Inside Xyz");
     }
}

Main.java

public Class Main{

public static void main(String arg[]){

  String classPath="Abc"; // this String will get assign @ runtime.
  Class<?> s = Class.forName(classPath);
}
}

这里的主方法classPath是“Abc”,所以我期待Abc实例。 classsPath 字符串将是 Abc 或 Xyz 或任何实现 MyInterface 的类名。因此,根据 classPath 字符串,我想要该类的实例。就像如果 ClassPath 是“Abc”则 Abc 类实例,ClassPath 是“Xyz”则 Xyz 类实例。 我怎样才能动态地实现这一点。

最佳答案

您需要知道要调用哪个构造函数。

假设您的所有类都有一个无参构造函数,并且您想要这样一个:

MyInterface instance =  (MyInterface) s.newInstance();

如果构造函数有不同的签名,您需要提供该签名,例如使用单个字符串参数:

MyInterface instance = (MyInterface) s
              .getConstructor(String.class)
              .newInstance("foo");

关于java - 当类名已知时,动态检索给定类的Object类的java对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27957803/

相关文章:

c# - 公共(public)字段与自动属性

c# - 如何从另一个类访问具有 protected 构造函数的类

c++ - 在 C++ 中使用类的命名空间定义类的成员

java - 如何漂亮地打印一个复杂的 Java 对象(例如,带有对象集合的字段)?

java - 我可以通过 JSON 在运行时动态创建 Java 对象吗?

java - 如果它们通过 java 包装在缓冲区中,我是否必须显式关闭所有流?

java - 解决 IntelliJ IDEA 中持续无效的目标发布问题

java - 无法在 Google Tango 设备中运行 Tango java_basic_examples

java - Servlet 映射无法正常工作

javascript - 在 jquery 中,如何显示 <span> 内变量的结果?