2014-06-18 23 views
21

Che cos'è il parametro receiver in Java? Java 8 Language Specification parla di this.Perché possiamo usare "questo" come parametro del metodo di istanza?

+5

L'ho trovato in http://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.4.1. Non è chiaro di cosa l'OP abbia bisogno di più di quanto dice il JLS ... ogni risposta probabilmente lo riformerà. –

+0

[Da JLS] (http://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.4.1), è un parametro formale? O lo sto fraintendendo? – Christian

+2

Direi che la domanda è abbastanza chiara. – olovb

risposta

27

Il JLS dà a hint:

In entrambi i casi, il parametro ricevitore esiste solamente per permettere l'dell'oggetto rappresentato da essere indicata nel codice sorgente, in modo che il tipo può essere annotato.

Questi due metodi sono equivalenti:

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

Tuttavia queste ultime consente di aggiungere annotazioni:

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

Un altro esempio è fornito in http://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#d5e14278 dove nessuna istanza di inclusione del tipo esterno è disponibile durante la costruzione –

7

parametri del ricevitore permettono di passare gli argomenti ed estrarre informazioni aggiuntive da questi argomenti. L'unico scopo di scrivere esplicitamente il ricevitore è quello di rendere possibile l'annotazione del tipo del destinatario. Ora, se si implementa l'interfaccia AnnotatedElement, è possibile chiamare il metodo getAnnotation() della classe per ottenere un tipo di annotazione. Per ulteriori informazioni, è possibile leggere this.

Problemi correlati