簡體   English   中英

用Java動態加載類

[英]Dynamically loading a class in Java

我查了一下語法並搜索了api,但仍然對這個過程感到困惑。 我還搜索了Stackoverflow。 加載類並動態創建對象的正確方法是什么? 換句話說,我希望用戶指定他們想要創建的對象類型,然后創建該類型的對象。 我不想要菜單,因為我希望他們能夠選擇當前目錄中的任何類。

假設該類具有無參數構造函數,最簡單的方法是 -

Object newObject = Class.forName(strFullyQualifiedClassName).newInstance();

參考 - java.lang.Class

ClassLoader.loadClass將加載一個類。 你可以通過myClass.getClassLoader()得到一個類加載器,如果為null,你應該回到ClassLoader.getSystemClassLoader()

一旦有了類實例,就可以通過getDeclaredConstructor(...)獲取它的構造函數。 因此,如果你有一個public class MyClass ,其構造函數如public MyClass(String) { ... }那么

Class<MyClass> clazz = MyClass.class;
Constructor<MyClass> ctor = clazz.getDeclaredConstructor(String.class);
MyClass instance = ctor.newInstance("foo");

以上忽略了一堆可能的異常。

這就是我的工作。 這不是一個完成的產品,但只是測試,看看我是否可以讓它工作。 謝謝所有回答問題的人:-)。

public class SimLoader {  
  public static void main(String[] args)  
  {  
    try  
    {  
    Object simulator = Class.forName("SimX").newInstance();  
    ((SimInterface)simulator).run();  
    }  
    catch(ClassNotFoundException e) {}  
    catch(InstantiationException e) {}  
    catch(IllegalAccessException e) {}  
    }  
  }  
interface SimInterface {  
 void run();  
}  
class SimX implements SimInterface  
{  
  public void run() {  
    System.out.println("Success");  
  }  
}  

暫無
暫無

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

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