2014-10-02 2 views
0

처리 (Java?)에서 중첩 함수를 빌드 할 수 있습니까 이 코드는 작동하지 않습니다. 컴파일러는 예기치 않은 토큰을 읽습니다 : void.중첩 함수 - 처리

void keyPressed() { 
     if(click1 = true) { 
       graph(); 
     } 
     if(click2= true) { 
       points(); 
     } 
     void graph() { 
     .... 
     .... 
     } 
} 
+0

Java에서는 실행할 수 없습니다. –

+0

익명의 수업이 필요할 수도 있습니다. –

+0

일반적으로 Processing의 callBack 함수에서 그리기를해서는 안됩니다. 그곳에 플래그를 사용하고'draw()'에서 드로잉을 호출하십시오. –

답변

0

중첩 된 기능을 사용할 수 없습니다. 예를 들어 새 스레드에서 익명 클래스를 가질 수 있습니다.

Thread t = new Thread(new Runnable() { 
    @Override 
    public void run() { 
     // This is all in an anonymous Runnable class. 
    } 
}); 
+0

이것은 처리에도 적용됩니까? –

+0

오, 이것은 자바 예제입니다. 처리도 그들 중 하나를 가지고 있지 않습니다. –

0

다른 사람들은 다음과 같이 말합니다. 아니요, 그런 "로컬 함수"를 가질 수 없습니다.

또한 부울 비교가 올바르게 수행되지 않습니다. 단 하나 = 대입이므로 비교가 아닙니다. 이미 부울로 작업하기 때문에

if(click1 == true) { 

또는 직접 참조 할 수 있습니다 :

if(click1) { 

을 어쨌든, 다시 질문 : 그것은이어야한다 당신이 할 수없는 것을 당신 얘기하고 있지만 익명의 클래스를 사용하면 문제를 해결할 수 있습니다. 익명 클래스를 사용하려면 으로 기존 클래스를 확장해야 하나 이상의 함수를 재정 의하여을 확장해야합니다. 은 메서드 내에서 수행합니다.

예를 들어 run() 메서드를 정의한 익명 클래스를 정의하고 그 익명 클래스를 직접 호출하여 구현할 수있는 Runnable 인터페이스가 있습니다. 여기에 익명의 내부 클래스에 대한

void keyPressed() { 
     if(click1) { 
        new Runnable(){ 
          public void run(){ 
            //do graph stuff here 
          } 
        }.run(); 
     } 
     if(click2) { 
        new Runnable(){ 
          public void run(){ 
            //do points stuff here 
          } 
        }.run(); 
     } 
} 

더 많은 정보는 : http://staticvoidgames.com/tutorials/objects/advancedInheritance

그러나,이 모든 것이 아주 나쁜 코드 냄새를 가지고 있으며, 어떤 온건 한 사람이 이런 짓을 했을까 방법이 아니다는 다음과 같습니다. 왜 당신은 지역 방법이 필요하다고 생각하니? 클래스를 별도로 사용하거나 정규의 오래된 최상위 메소드를 사용해야 할 가능성이 있습니다.