2012-11-22 4 views
0

가상 로봇이 서로 싸우는 작은 (재미있는) 게임을 만들고 있습니다. 이 로봇의 클래스 이름 배열이 있지만로드하는 방법을 모르겠습니다. 주 파일에서Java 변수에서 클래스 가져 오기

package Arena; 

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

    } 

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

:

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

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

추가 세부 정보 :

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

'String.class'에서 얻은 것과 같은'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() 메서드는 Object 유형에 대해 정의되지 않았습니다."라고합니다. –

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(); 
}