[英]Java Reflections
我有一個抽象類'A'和類'B'和'C'擴展A.我想在運行時根據一些變量創建這些實例。 如下所示:
public abstract class A {
public abstract int count();
}
public class B extends A {
public int count () {
//print 10;
}
}
public class C extends A {
public int count () {
//print 20;
}
}
我會使用下面的代碼來調用方法計數:
String token;
int i = 10;
if (i == 10) //edit
token = "B";
else
token = "C";
A a;
try {
a = (A) (Class.forName("org.source."+token)).newInstance();
} catch (Exception e) {
//print e
}
a.count();
由於我是java反思的新手,以下是我的兩個問題:
我上面做的是正確的(編輯:在默認構造函數的情況下)? (我假設是)
如果調用默認構造函數(不帶參數),則上述方法有效。 我如何處理我有構造函數接受參數的情況。 我不太確定如何使用Constructor.newInstance()可以在上面的情況下使用。
任何幫助,贊賞,
只有當你想調用no-arg構造函數時,你所做的才是正確的,這實際上是你在Class中使用“newInstance”方法唯一能做的事情。 看到:
http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Class.html#newInstance ()
要使用n-args調用構造函數,請使用Constructor類:
有關上述用法的示例,請參閱反思教程:
http://docs.oracle.com/javase/tutorial/reflect/member/ctorInstance.html
有關更多信息。
是的,它會奏效。
如果你想使用默認(no-args)之外的構造函數,請繼續閱讀。
假設您想要使用int
和String
參數調用構造函數。 這是將執行此操作的代碼:
Class<?> clazz = Class.forName("org.source."+ token );
Constructor<?> constructor = clazz.getConstructor(int.class, String.class);
Object object = constructor.newInstance(1, "hello");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.