Che cos'è il parametro receiver
in Java? Java 8 Language Specification parla di this
.Perché possiamo usare "questo" come parametro del metodo di istanza?
risposta
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 {}
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 –
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.
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à. –
[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
Direi che la domanda è abbastanza chiara. – olovb