Java 8から増えてたExplicit receiver parameters

Java 8からこういう書き方が出来るようになっていたようです。(初めて知った)

public class Main {

    public String getString(Main this) { // thisで自分自身が引数になっている
        return this.toString();
    }
    
    public static void main(String[] args) {
        Main main = new Main();
        System.out.println(main.getString()); //呼び出すときは何も書かなくてもよい
    }
}

何がうれしいかというと、自分自身を呼び出すときにアノテーションがつけれるようになる。(そして処理が出来るようになる)
なんか、おおっ!という感じ。

呼び出すときに何も書かなくてよいというのがものすごくJavaっぽくないので驚きました。

http://blog.joda.org/2015/12/explicit-receiver-parameters.html

なお、これを使うとPMD5.4.1より前は死ぬ。
https://sourceforge.net/p/pmd/bugs/1455/


2016/06/15(追記)
コメントで何に使うのかさっぱりわからんという意見が多発していますが、それに対する回答としては

という感じで、Type Annotationを使用する場合に使用することがある。基本的には使用するケースはない。
となります。
ということで、基本的にあまりうれしくないという結論に。

便利(なのかもしれない)と思ってしまった人は勉強が足りないぞっ☆彡