簡體   English   中英

當類名已知時,將Object類的java對象動態檢索到給定的類

[英]Dynamically retrive the java object of Object class to a given class when class name is known

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 Class實例,ClassPath是“ Xyz”,然后是Xyz Class實例。 我如何動態地做到這一點。

您需要知道要調用的構造函數。

假設您所有的類都有一個無參數的構造函數,而您想要一個:

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

如果構造函數具有不同的簽名,則需要提供該簽名,例如,使用單個String參數:

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

您可以使用類的名稱在運行時動態創建對象,並以簡單字符串的形式輸入。 這是使用Java語言中稱為反射的一部分完成的。 反射允許舊代碼調用新代碼,而無需重新編譯。 如果一個類具有無參數構造函數,則通常使用以下方法從其包限定的類名稱(例如,“ java.lang.Integer”)創建對象:

Class.forName Class.newInstance如果需要將參數傳遞給構造函數,則可以使用以下替代方法:

Class.getConstructor Constructor.newInstance反射的最常見用法是實例化一個類,該類的類屬類型在設計時是已知的,但其特定實現類不是。 有關示例,請參見插件主題。 反射的其他用途相當少見,並且主要出現在特殊用途的程序中。

我在您的帖子中看到了一些錯別字,所以讓我們先修復那些錯別字。 publicclass喜歡

public interface MyInterface {
    void print();
}

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

然后,可以使用Class.newInstance()創建一個Object ,檢查它的預期的類型用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();
    }
}

類的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
 }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM