2015-06-16 3 views
2

Недавно я слышал, что это возможно, так как Java 8, чтобы определить явный параметр, называемый this в методах экземпляра, например:Java 8 Явная «это» Параметр

public class Test 
{ 
    public void test(Test this, int i) { System.out.println(i); } 
} 

Что является использование для этого вида синтаксиса ?

Как вы можете ясно видеть на этом скриншоте (Eclipse, соответствие компилятора Java 8), это допустимый синтаксис.

Proof

+0

Что бы цель такого заявления? –

+0

Точно так же как побочный элемент: внутри компилятор будет изменять все методы экземпляра, чтобы иметь параметр _this_, но именно так методы позволяют работать с экземплярами. Это то, что компилятор будет делать неявно, а не разработчик явно. Если разработчикам разрешено это делать, они, вероятно, сломают компилятор. – Thomas

+0

Как вы могли бы сказать, это изображение из исходного кода компилятора, поэтому я уже знаю, как работают эти методы и экземпляры на JVM. Вот почему синтаксис имеет смысл, так как «this', 0-й параметр, теперь явный. – Clashsoft

ответ

7

Для Java 7 или до, вы не можете использовать this в качестве имени переменной, потому что это reserved keyword. Что вы можете сделать, это передать this в качестве параметра в метод:

class Test { 
    public void foo(Test test, int i) { 
     //... 
    } 
    public void foo(int i) { 
     foo(this, i); 
    } 
} 

Для Java 8 см Why can we use 'this' as an instance method parameter?

+0

Неправильно, я приложил изображение к вопросу, который ясно показывает, что вы можете (даже в интерфейсе). – Clashsoft

+0

@Clashsoft ** Для Java 7 или ранее **. Ваш код компилируется для Java 8 ... –

Смежные вопросы