2016-10-26 4 views
1

다른 클래스에서 클래스를 실행하려고합니다. 그러나 클래스 이름을 배열에 저장할 때 형식을 변경하도록 요청합니다. 나는 사용자가 배열에 공급 될 숫자를 입력하고 그 배열 값에서 클래스를 실행하기를 원한다. 여기 내 코드는 지금까지 있습니다 : 그들이 return statement를 추가하고 다음 날 class을 입력하는 void에서 클래스 유형을 변경 만들고 있기 때문에클래스 유형 (또는 리턴)을 변경하지 않고 다른 클래스의 클래스를 호출하십시오. Java

public class All_Challenges { 

public static void main(String[] args) { 
    System.out.println("Which class do you want to run?: "); 
    System.out.println("1. The first class"); 

Class[] theFiles = new Class[31]; 
    theFiles[1] = Challenge_1_Whats_Your_Name.main(args); 
    theFiles[1].main(args); 
    } 
} 

마지막 두 줄은 나에게 오류를주고있다. 나는 약 30 개 정도를 가지고 있으므로 다른 모든 수업에서 나의 메인 방식을 바꾸지 않는 것을 선호합니다. 이 일을 할 필요가 없도록 어떤 물건을 써야합니까? 내 배열이 "유형"인 것과 관련이 있다고 생각합니다. 또는 라인과 관련이있을 수도 있습니다. main.(args); 이상한 부분은 배열에서 호출하지 않을 때 유형을 변경하라는 메시지가 표시되지 않는다는 것입니다.

+5

당신이 달성하려고하는지 분명하지 않다 - 왜 당신이 배열을 전혀 만들지 않습니까? 당신은 그것으로 무엇을 기대합니까? –

+0

일반적으로 JVM은 사용자 대신 직접 main() 메소드를 호출합니다. 여기서 성취하려는 것을 알려주십시오. –

+0

'main (args)'를 변수 (무엇이든간에)'Class' 객체 나 다른 변수의 인스턴스에 호출 한 결과 인'void'를 할당합니다. 왜냐하면'void'가 할 수 있기 때문에 당신은 할 수 없습니다 값으로 설정 될 수 없습니다. 당신이해야 할 일은 클래스를 그 배열에 저장하는 것일 것입니다. 그리고 그것을 리플렉션하여 특정 메소드를 호출하는 것입니다. 당신이하고 싶은 것을 더 명확히하지 않는 한. – Yazan

답변

0

문제는 클래스 배열에 메서드를 넣으려고한다는 것입니다. 작동한다

Class[] theFiles = new Class[31]; 
    theFiles[1] = Challenge_1_Whats_Your_Name.class; 
    try { 
     theFiles[1].getMethod("main", String[].class).invoke(args); 
    } catch (IllegalAccessException | NoSuchMethodException | InvocationTargetException e) { 
     e.printStackTrace(); 
    } 

당신

+0

그러나이 클래스에서는'Challenge_1_Whats_Your_Name' 프로그램을 실행하지 않습니다. –

0
당신은 반사를 사용하여 작업을 수행 할 수 있습니다

:

public class TestMain { 

    private static final Class<?>[] classArray = {A.class, B.class}; 

    public static void main(String[] args) { 
     for (Class<?> classExec : classArray) { 
      try { 
       //get main 
       Method method = classExec.getMethod("main", String[].class); 
       method.invoke(null, (Object) args); 
      } catch (NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 

    public static class A { 
     public static void main(String[] args) { 
      System.out.println("A"); 
     } 
    } 

    public static class B { 
     public static void main(String[] args) { 
      System.out.println("B"); 
     } 
    } 

} 

참조 : https://stackoverflow.com/a/4980149/1255493