我想動態加載實現接口的具體類。輸入:具體類名稱。使用Java加載動態類
我需要調用這個具體類的方法,那就是,我需要設置:
MyInterface myclass = new concreteClassName();
myclass.function();
我怎樣才能做到這一點?
我想動態加載實現接口的具體類。輸入:具體類名稱。使用Java加載動態類
我需要調用這個具體類的方法,那就是,我需要設置:
MyInterface myclass = new concreteClassName();
myclass.function();
我怎樣才能做到這一點?
String str = "Test$B"; //your full class name here instead of Test$B
A clazz = null; //change A to be your interface
try {
clazz = (A)Class.forName(str).newInstance(); //change A to be your interface
} catch (Exception e) {
//TODO: handle exceptions
e.printStackTrace();
}
if (clazz != null) {
clazz.foo();
}
您檢查了
try {
// Load class
Class<?> cls = Class.forName("my.package.ConcreteClass");
// Instantiate object from class using default constructor
my.package.ConcreteClass obj = (my.package.ConcreteClass) cls.newInstance();
// Execute method on it
obj.myMethod();
} catch (Exception e) {
throw new RuntimeException("Could not instantiate class", e);
}
和相應的javadoc條目Class#forName
和Class#newInstance
?
請注意'class'是一個java關鍵詞,並且您無法命名您的變量類 – amit
您的動態加載意味着什麼? – umbr
@amil:我現在編輯它,它只是一個例子 – Shakes