2014-06-18 22 views
21

Co to jest parametr receiver w języku Java? Specyfikacja języka Java 8 mówi o this.Dlaczego możemy użyć "this" jako parametru metody instancji?

+5

Po prostu znalazłem go w http://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.4.1. Nie jest jasne, czego potrzebuje PO, ale JLS mówi, że ... każda odpowiedź może właśnie to zmienić. –

+0

[z JLS] (http://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.4.1), czy jest to formalny parametr? Czy nie rozumiem tego? – Christian

+2

Powiedziałbym, że pytanie jest całkiem jasne. – olovb

Odpowiedz

27

JLS daje a hint:

czy inaczej, parametr odbiornik istnieje wyłącznie w celu umożliwienia typu reprezentowanego obiektu być oznaczona kodem źródłowym, tak że typ może być opatrzone.

Te dwie metody są równoważne:

class Test { 
    void m1() { } 
    void m2(Test this) { } 
} 

Jednak ten ostatni pozwala na dodawanie adnotacji:

void m2(@MyAnnotation Test this) { } 
//where MyAnnotation can be defined like this for example: 
@Target(ElementType.TYPE_USE) @interface MyAnnotation {} 
+2

Kolejny przykład jest podany w http://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#d5e14278, gdzie żadna obudowa zewnętrznego typu nie jest dostępna podczas budowy –

7

parametry odbiornika pozwalają przekazywać argumenty i wyodrębnić dodatkowych informacji od tych argumentów. Jedynym celem wyraźnego napisania odbiornika jest umożliwienie opisania typu odbiornika. Teraz, jeśli zaimplementujesz interfejs AnnotatedElement, możesz wywołać metodę getAnnotation() twojej klasy, aby uzyskać typ adnotacji. Aby uzyskać więcej informacji, przeczytaj artykuł this.