2014-06-18 398 views
21

什麼是Java中的receiver參數? Java 8語言規範談到了this爲什麼我們可以使用'this'作爲實例方法參數?

+5

剛剛在http://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.4.1中找到它。目前尚不清楚OP的需求比JLS所說的要多,但任何答案都可能僅僅是爲了說明這一點。 –

+0

[來自JLS](http://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.4.1),它是一個正式參數嗎?或者我誤解了它? – Christian

+2

我會說這個問題很清楚。 – olovb

回答

27

的JLS給出a hint

無論哪種方式,所述接收器參數存在僅允許表示對象的類型,以在源代碼來表示,這樣的類型可以進行註釋。

這兩種方法是等效的:

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

但是後者可以讓你添加註解:

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

另一個示例在http://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#d5e14278中給出,其中在施工期間沒有外部類型的封閉實例可用 –

7

接收機參數允許來傳遞參數和提取這些參數的附加信息。明確寫入接收者的唯一目的是使註解接收者的類型成爲可能。現在,如果您實現AnnotatedElement接口,則可以調用類的getAnnotation()方法來獲取註釋類型。 欲瞭解更多信息,你可以閱讀this

相關問題