2012-11-22 110 views
0

我正在製作一個虛擬機器人互相爭鬥的小型(趣味)遊戲。我有這些機器人類的名稱數組,但我不知道如何加載它們。這也可能是在代碼更加清晰:從Java中的變量中獲取類

String[] classes={"Bot1","Bot2","Bot123"}; 
Object[] bots=new Object[classes.length]; 

for(int i=0;i<classes.length;i++){ 
    bots[i]=UnknownFunction(classes[i]); 
} 

其他細節:

package Arena; 

public class Bot { 
    public void main(String args[]){ 

    } 

    public void init(){ 
     System.out.print("Loaded"); 
    } 
} 

在主文件:

bot=Class.forName("Arena.Bot").newInstance(); 
bot.init(); 
+0

你想得到一個'類'對象,就像你從'String.class'獲得的對象嗎?或者你想要像'new String()'那樣的類的實例嗎? – zapl

回答

1

您需要Class.forName()方法加載你的類,然後newInstance()方法實例他們。假設你在他們身上有0-arg constructor: -

bots[i] = Class.forName(classes[i]).newInstance(); 

還要注意的是,這些類名必須是fully qualified名。

+0

感謝您的回覆。我將如何獲得完全限定名稱? –

+0

@Linksku ..你必須給。完全限定的類名意味着'package.subpackage.classname'。例如: - 'pkg1.YourClass'。 –

+0

我想我已經設法加載類(try/catch不會返回任何錯誤),但我無法在類中運行任何方法。我總是得到「方法init()未定義類型對象」。 –

0
String[] classes = {"Bot1", "Bot2", "Bot123"}; 
Object[] bots = new Object[classes.length]; 

for(int i = 0; i < classes.length; i++) 
{ 
    bots[i] = Class.forName(classes[i]).newInstance(); 
}