2012-02-04 27 views
7

Tôi đã tìm kiếm khắp nơi cố gắng tìm ra các val $ editorkit hoặc dấu $ phía dưới phương tiện là gì, nhưng may mắn không ... xin vui lòng giúp đỡ ...

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

Đây có phải là một mã decompiled? – Natix

Trả lời

3

Ký hiệu $ được trình biên dịch Java sử dụng để tạo tên các lớp bên trong, trường và phương thức tổng hợp. Nó hợp lệ đối với các mã định danh trong nguồn Java, nhưng không được khuyến khích.

Mã bạn hiển thị trông giống như mã được giải mã của một lớp bên trong ẩn danh. Việc thực hiện Runnable ẩn danh trong phương thức updateHtmlEditor truy cập các tham số của phương thức xung quanh. Để làm cho truy cập đó có thể, các tham số cần phải được khai báo final. Trong mã byte Java, lớp ẩn danh có ba thuộc tính cuối cùng, this$0 chứa trường hợp bên ngoài LinkParser.this, val$editorkitval$reader chứa các tham số phương thức bên ngoài và một hàm tạo với ba đối số, gán đối số của nó cho các thuộc tính.

Cũng lưu ý rằng LinkParser.this.htmlViewEditor là tham chiếu đến thuộc tính của lớp bên ngoài, LinkParser. Trong ví dụ này, có thể bỏ qua tham chiếu rõ ràng về thể hiện bên ngoài LinkParser.this.

Mã nguồn gốc trông giống như sau:

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

Cảm ơn mọi người đã giúp đỡ ... – scamexdotexe

15

Nó không có nghĩa là bất cứ điều gì đặc biệt - nó chỉ là một lá thư tạo thành một phần của tên, chính xác như l trước nó hoặc e sau đó.

Xem phần JLS theo số Identifiers để biết chi tiết đầy đủ về nội dung được phép và không được phép trong tên.

4

Chúng ta có thể không thực sự nói với tôi đoán kể từ khi bạn đã không cung cấp khai báo biến, nhưng trong Java các $ có thể là một phần của một tên biến, ví dụ bạn có thể làm một cái gì đó giống như vậy:

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

Điều gì đó tương tự sẽ in Hello.

Các vấn đề liên quan