@get:XXX と @XXX の違いを教えてエロい人

UIテストを絶賛書いているところで、つまづいたことをメモ。
**注意：なぜか動いたが、結果わからん、という記事です**

## 背景

UIテストにおいてPermissionを自動で許可してくれる `GrantPermissionRule` を使う際、
Javaのサイトにお世話になっていた

```Java
@Rule 
public GrantPermissionRule permissionRule = GrantPermissionRule.grant(
        Manifest.permission.CAMERA);
```

## エラーがでる

いざKotlin変換しつつコピペしたらエラーがでた

```kotlin
    @Rule
    var grantPermissionRule = GrantPermissionRule.grant(Manifest.permission.CAMERA);
```

どうやらテスト前の初期化でつまづいている様子、、、
でもなんで？？？？？？

```
java.lang.RuntimeException: Delegate runner 'androidx.test.internal.runner.junit4.AndroidJUnit4ClassRunner' for AndroidJUnit4 could not be loaded.
at androidx.test.ext.junit.runners.AndroidJUnit4.throwInitializationError(AndroidJUnit4.java:92)
at androidx.test.ext.junit.runners.AndroidJUnit4.loadRunner(AndroidJUnit4.java:82)
at androidx.test.ext.junit.runners.AndroidJUnit4.loadRunner(AndroidJUnit4.java:51)
at androidx.test.ext.junit.runners.AndroidJUnit4.<init>(AndroidJUnit4.java:46)
at java.lang.reflect.Constructor.newInstance0(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:104)
at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:86)
at androidx.test.internal.runner.junit4.AndroidAnnotatedBuilder.runnerForClass(AndroidAnnotatedBuilder.java:63)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:26)
at androidx.test.internal.runner.AndroidRunnerBuilder.runnerForClass(AndroidRunnerBuilder.java:153)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
at androidx.test.internal.runner.TestLoader.doCreateRunner(TestLoader.java:73)
at androidx.test.internal.runner.TestLoader.getRunnersFor(TestLoader.java:105)
at androidx.test.internal.runner.TestRequestBuilder.build(TestRequestBuilder.java:793)
at androidx.test.runner.AndroidJUnitRunner.buildRequest(AndroidJUnitRunner.java:575)
at androidx.test.runner.AndroidJUnitRunner.onStart(AndroidJUnitRunner.java:393)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:2145)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Constructor.newInstance0(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
at androidx.test.ext.junit.runners.AndroidJUnit4.loadRunner(AndroidJUnit4.java:72)
... 17 more
Caused by: org.junit.runners.model.InitializationError
at org.junit.runners.ParentRunner.validate(ParentRunner.java:418)
at org.junit.runners.ParentRunner.<init>(ParentRunner.java:84)
at org.junit.runners.BlockJUnit4ClassRunner.<init>(BlockJUnit4ClassRunner.java:65)
at androidx.test.internal.runner.junit4.AndroidJUnit4ClassRunner.<init>(AndroidJUnit4ClassRunner.java:43)
at androidx.test.internal.runner.junit4.AndroidJUnit4ClassRunner.<init>(AndroidJUnit4ClassRunner.java:48)
... 20 more
```

## 直った、でもなんでかわからん

`@get:Rule` にアノテーションを変えたら通った。
でもなぜかわからない！！！！！！

```kotlin
    @get:Rule
    var grantPermissionRule = GrantPermissionRule.grant(Manifest.permission.CAMERA);
```

## JavaのGetterを修飾するらしい

こちらの記事を参考、[Kotlin文法 - アノテーション、リフレクション、型安全なビルダー、動的型](https://qiita.com/k5n/items/3eaafc5aa5a07cd02f5c#%E3%82%A2%E3%83%8E%E3%83%86%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E5%88%A9%E7%94%A8%E5%A0%B4%E6%89%80%E3%82%BF%E3%83%BC%E3%82%B2%E3%83%83%E3%83%88)

Javaでは曖昧に定義して適当にコンパイラが理解してくれたのを、Kotlinだとキッチリ宣言しないと別の意味になってエラーになってるのかな...???