当类名已知时,动态地将对象类的java对象检索到给定的类

当类名已知时,动态地将对象类的java对象检索到给定的类,java,class,object,Java,Class,Object,MyInterface.java publc interface MyInterface{ void print(); } java public Class Abc implements MyInterface{ public void print(){ System.out.print("Inside Abc"); } } Xyz.java public Class Xyz implements MyInterface{

MyInterface.java

publc interface MyInterface{
   void print();
}
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);
}
}
公共类主{
公共静态void main(字符串arg[]){
String classPath=“Abc”;//此字符串将获得assign@runtime。
Class s=Class.forName(类路径);
}
}
这里的主方法类路径内部是“Abc”,所以我期待Abc实例。 classsPath字符串将是Abc或Xyz或实现MyInterface的任何类名。因此,根据类路径字符串,我需要该类的实例。比如,如果类路径是“Abc”,那么Abc类实例,类路径是“Xyz”,那么Xyz类实例。
我怎样才能动态地做到这一点。

我在你的帖子中看到一些拼写错误,所以让我们先修复它们<代码>公共和
类似

public interface MyInterface {
    void print();
}

public class Abc implements MyInterface {
    public void print() {
        System.out.print("Inside Abc");
    }
}
然后使用
Class.newInstance()
创建一个
对象
,用
instanceof
检查它是否是预期的类型,然后像

public static void main(String[] args) {
    try {
        Class<?> cls = Class.forName("Abc");
        Object o = cls.newInstance();
        if (o instanceof MyInterface) {
            MyInterface m = (MyInterface) o;
            m.print();
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}
publicstaticvoidmain(字符串[]args){
试一试{
类别cls=类别forName(“Abc”);
对象o=cls.newInstance();
if(MyInterface的o实例){
MyInterface m=(MyInterface)o;
m、 打印();
}
}捕获(例外e){
e、 printStackTrace();
}
}

您需要知道调用什么构造函数

假设您的所有类都有一个无参数构造函数,并且您希望使用该构造函数:

MyInterface instance =  (MyInterface) s.newInstance();
如果构造函数具有不同的签名,则需要提供该签名,例如,使用单个字符串参数:

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

类的newInstance方法用于创建新实例

 public static void main(String arg[]){

  String classPath="Abc"; // this String will get assign @ runtime.
  Class s = Class.forName(classPath);
  Object object = s.newInstance();// to create new Instance
 }

您可以在运行时使用类的名称(输入为简单字符串)动态创建对象。这是使用Java语言中称为反射的一部分来完成的。 反射允许旧代码调用新代码,而无需重新编译。 如果类具有无参数构造函数,则通常使用以下方法从其包限定类名(例如,“java.lang.Integer”)创建对象:

Class.forName Class.newInstance 如果需要将参数传递给构造函数,则可以使用以下替代方法:

Class.getConstructor 构造函数。newInstance 反射最常见的用途是实例化一个类,该类的泛型类型在设计时已知,但其特定的实现类却未知。有关示例,请参见插件主题。反射的其他用途相当罕见,并且大多出现在专用程序中