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.
- 1. Perché non possiamo usare 'questo' parola chiave in un metodo statico
- 2. Quando possiamo usare il metodo ClearAllPools?
- 3. Perché possiamo usare array con riferimento generico
- 4. Variabile di istanza Python come parametro predefinito
- 5. Come forzare l'uso del metodo di estensione invece del metodo di istanza con params?
- 6. Perché un parametro del metodo causa NotSerializableException con Mockito?
- 7. Perché non possiamo usare le stringhe C come SEL?
- 8. Perché il metodo Static nasconde il mio metodo di istanza?
- 9. Espressione lambda C# come parametro del metodo
- 10. come parametro del metodo in Java
- 11. Perché questo parametro del modello predefinito non è consentito?
- 12. Perché questo parametro del percorso è virato sulla querystring?
- 13. Passaggio delegato come parametro del metodo
- 14. Array.Initialize - Perché esiste questo metodo?
- 15. Perché non possiamo usare i costruttori con corpo espressivo?
- 16. Posso usare un attributo di classe come valore predefinito per un metodo di istanza?
- 17. Cosa possiamo usare al posto di nstimer?
- 18. Rails: metodo di istanza del modello o metodo di supporto?
- 19. C++ utilizzando 'questo' come parametro
- 20. Come utilizzare parametro del metodo attributi
- 21. Possiamo usare & in url?
- 22. Emacs Rubino parametro del metodo di indentazione
- 23. ActionMailer metodo di istanza viene utilizzato come metodo di classe
- 24. TryUpdateModel vs. parametro del metodo fortemente tipizzato
- 25. Perché non possiamo usare "l'ereditarietà virtuale" in COM?
- 26. Modifica istanza di classe all'interno di un metodo di istanza
- 27. come possiamo usare startActivityforResult() per l'intento dell'email?
- 28. Metodo Parametro Dilemma
- 29. Posso usare i metodi di istanza privati come callback?
- 30. Dove usare "questo" in java?
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