2017-01-03 3 views
0

인스턴스가 있습니다. 기본 구조는;터미널을 통해 java 인스턴스 메소드 실행

class Instance{ 

    public void load(){ 
     ... 
    } 

    public boolean execute(){ 
     ... 
     return true; 
    } 

} 

은 일반적으로 우리가 static void main(String args[])의 인스턴스를 실행할 수 있지만, 우리는 인스턴스를 실행하는 방법 ->load() ->execute()를 단말기 또는 컴파일 된 파일 .class에서 정의 된 방법을 실행하기 위해 반사를 사용하는 것보다 main 방법 내에서 호출된다.
이 인스턴스는 외부 프로젝트에서 스크립트처럼 작동하기 때문에 main 함수를 클래스로 정의하지 않습니다.

누구든지 도움이 되나요?

+0

수 없습니다. 문자열을 "execute"또는 "load"를 인수로 전달하고 인수로 전달 된 문자열을 기반으로 기본 메소드에서 메소드를 호출 할 수 있습니다. – jordaniac89

답변

1

load()execute()을 호출하는 것만으로 간단하게 명령 줄에서 클래스를 실행할 수 있도록 public static void main(String args[])을 추가하는 것이 좋습니다. 어쨌든 자체적으로 public static void main(String args[])을 필요로하는 반사 기반 래퍼를 작성하여 문제를 복잡하게 만들지는 않습니다.

1

우리는이 인스턴스를 실행할 수있는 방법 -> 부하를() -> 터미널

당신은 할 수 없습니다

()에서 실행합니다.

아마도 implemented in Java 9 일 수 있지만 현재로서는 명령 행에서 메소드를 실행하는 공식적인 방법이 없습니다.

File pathToClass = new File("C:\\Some Folder\\"); 

Class<?> loaded = null; 
try { 
    ClassLoader loader = new URLClassLoader(new URL[] {pathToClass.toURL()}); 
    loaded = loader.loadClass("some.package.foo.Instance"); 
} catch(Exception e) { 
    //do something 
} 

Object i = loaded.newInstance(); 
Method method = loaded.getMethod("execute"); 
Boolean returnValue = (Boolean) method.invoke(i); 

그래도 난이 일을하지 않는 것이 좋습니다 것 -이 : 당신이 말했듯이

또는 컴파일 된 파일을 .class는 사용 반사, 반사

을 사용하는 것보다 main 메소드 내에서 호출됩니다 일반적으로 더 좋은 방법이며 모든 것을 지나치게 복잡하게 만듭니다.