2017-01-12 2 views
1

사용자가 자신의 코드를 작성할 수있는 텍스트 편집기가있는 곳에서 응용 프로그램을 작성하고 있습니다. 그런 다음이 코드를 컴파일하기를 원합니다. 어떻게 해야할지 모르겠지만 사용자가 컴파일 한 코드에서 응용 프로그램 소스의 함수를 호출하는 것입니다.응용 프로그램 컴파일 중 - Java

예를 들어 MoveUp() 함수로 'Player'라는 클래스가있는 경우, 어떻게 사용자가 컴파일 한 코드에서이 함수를 호출 할 수 있습니까?

+0

Java 파일에서 직접 메서드를 호출 할 수 없습니다. 일부 Player 객체의 인스턴스에 명시 적으로 그 메소드를 호출하는 메인 메소드가 필요할 것입니다. –

+2

@Benfir XY 문제와 같은 냄새가납니다. 원래 달성하고자하는 것은 무엇입니까? –

+0

저는 AI를 다른 플레이어와 상호 작용하여 프로그래밍을 배울 수있는 게임을 만들고 있습니다. 게임의 텍스트 편집기에 코드를 입력합니다. 코드는 다른 플레이어와의 거리를 확인한 다음 미리 작성한 기능을 사용하여 플레이어로 이동합니다. 예 : DistanceToPlayer(); 또는 MoveTo(); – Benifir

답변

1

코드를 이미 컴파일하는 방법을 알고 있고 컴파일 된 클래스 파일이 실제로 저장되지 않은 곳을 아는 경우. 단지 약간의 성찰이 필요합니다.

//replace filePath with the path to the folder where the class file is stored 
    URLClassLoader classLoader = URLClassLoader.newInstance(new URL[]{filePath.toURI().toURL()}); 

    //this actually loads the class into java so you can use it 
    Class<?> cs = Class.forName(compiledClassName, true, classLoader); 

    //the getConstructor method will return the constructor based on the 
    //parameters that you pass in. The default constructor has none, but if 
    //you want a different constructor you just pass in the class of the 
    //object you want to use 
    Constructor<?> ctor = cs.getConstructor(); 

    //you can then just create a new instance of your class 
    Player player = (Player) ctor.newInstance(); 

    //You can then call any methods on the Player object that you want. 
    player.MoveUp(); 

코드를 컴파일 할 때 클래스 패키지가 컴파일 된 클래스 파일의 위치를 ​​이동할 수 있다는 것을 기억하십시오. 코드의 패키지 문을 제거하거나 원하는 위치에 패키지를 추가하는 것이 더 쉽습니다.

동시에 여러 개의 "플레이어"클래스에 대해이 작업을 수행하려는 경우 각 클래스마다 고유 한 이름이 필요합니다. 그들이 없으면, 그들은 같은 클래스 파일을 공유하게 될 것이고, 그것 때문에 같은 코드를 모두 가질 것입니다.

관련 문제