[英]Dynamically converting java object of Object class to a given class when class name is known
[英]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反射的最常見用法是實例化一個類,該類的類屬類型在設計時是已知的,但其特定實現類不是。 有關示例,請參見插件主題。 反射的其他用途相當少見,並且主要出現在特殊用途的程序中。
我在您的帖子中看到了一些錯別字,所以讓我們先修復那些錯別字。 public
和class
喜歡
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.