簡體   English   中英

Java思考

[英]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反思的新手,以下是我的兩個問題:

  1. 我上面做的是正確的(編輯:在默認構造函數的情況下)? (我假設是)

  2. 如果調用默認構造函數(不帶參數),則上述方法有效。 我如何處理我有構造函數接受參數的情況。 我不太確定如何使用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/7/docs/api/java/lang/reflect/Constructor.html#newInstance(java.lang.Object ...)

有關上述用法的示例,請參閱反思教程:

http://docs.oracle.com/javase/tutorial/reflect/member/ctorInstance.html

有關更多信息。

是的,它會奏效。

如果你想使用默認(no-args)之外的構造函數,請繼續閱讀。

假設您想要使用intString參數調用構造函數。 這是將執行此操作的代碼:

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.

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