2012-02-04 2 views
7

나는 모든 곳에서 발에 $의 EditorKit의 또는 수단 아래 $ 기호가 무엇인지 알아 내려고 노력 검색 한, 그러나 운이 ... 도와주세요 아래의 자바 코드에서 봐주십시오

private synchronized void updateHtmlEditor(HTMLEditorKit editorkit, StringReader reader) 
    { 
    Runnable runnable = new Runnable(editorkit, reader) 
    { 
     public void run() { 
     try { 
      this.val$editorkit.read(this.val$reader, LinkParser.this.htmlViewEditor.getDocument(), LinkParser.this.htmlViewEditor.getDocument().getLength()); 

     } catch (IOException ex) { 
      Logger.getLogger(LinkParser.class.getName()).log(Level.SEVERE, null, ex); 
     } catch (BadLocationException ex) { 
      Logger.getLogger(LinkParser.class.getName()).log(Level.SEVERE, null, ex); 
     } 
     } 
    }; 
    SwingUtilities.invokeLater(runnable); 
    } 
+4

이는 디 컴파일 코드 :

원래의 소스 코드는 다음과 같이 보인다? – Natix

답변

3

$ 기호는 내부 클래스, 합성 필드 및 메소드의 생성 된 이름에 대해 Java 컴파일러에서 사용됩니다. Java 소스의 식별자에는 유효하지만 권장하지 않습니다.

표시되는 코드는 익명의 내부 클래스의 디 컴파일 된 코드처럼 보입니다. 메서드 updateHtmlEditor 내의 익명 Runnable 구현은 주변 메서드의 매개 변수에 액세스합니다. 해당 액세스를 가능하게하려면 매개 변수를 final으로 선언해야합니다. Java 바이트 코드에서 익명 클래스는 바깥 쪽 인스턴스 LinkParser.this, val$editorkitval$reader이 외부 메서드 매개 변수를 포함하는 3 개의 최종 인스턴스 특성과 해당 인수를 특성에 할당하는 3 개의 인수가있는 생성자를 갖습니다.

또한 LinkParser.this.htmlViewEditor은 외부 클래스의 특성에 대한 참조 인 LinkParser입니다. 이 샘플에서는 바깥 쪽 인스턴스 LinkParser.this에 대한 명시 적 참조를 생략 할 수 있습니다.

private synchronized void updateHtmlEditor(final HTMLEditorKit editorkit, final StringReader reader) 
    { 
    Runnable runnable = new Runnable() 
    { 
     public void run() { 
     try { 
      editorkit.read(reader, htmlViewEditor.getDocument(), htmlViewEditor.getDocument().getLength()); 
     } catch (IOException ex) { 
      Logger.getLogger(LinkParser.class.getName()).log(Level.SEVERE, null, ex); 
     } catch (BadLocationException ex) { 
      Logger.getLogger(LinkParser.class.getName()).log(Level.SEVERE, null, ex); 
     } 
     } 
    }; 
    SwingUtilities.invokeLater(runnable); 
    } 
+0

귀하의 모든 도움에 감사드립니다 ... – scamexdotexe

15

특별한 의미는 아닙니다. 그 이름의 일부를 구성하는 문자 일뿐입니다. 정확히 그 전에 l 또는 e과 같습니다.

이름에 허용되는 것과 허용되지 않는 것에 대한 자세한 내용은 Identifiers의 JLS 섹션을 참조하십시오.

4

우리는 정말 예를 들어 당신과 같이 일을 할 수 있습니다, 당신은 변수 선언을 제공하지 않았기 때문에 내가 추측하지만, 자바에서 $ 변수 이름의 일부가 될 수 말할 수 없다 :

String str$rr = "Hello"; 
System.out.println(str$rr); 

이와 비슷한 내용이 Hello으로 인쇄됩니다.

관련 문제