Как вы аннотируете параметр Pair в Kotlin? - PullRequest
0 голосов
/ 07 июня 2018

Я хочу использовать Pair<Int, Int> в качестве типа возврата, когда один из Int помечен @StringRes.

Pair<@param:StringRes Int, Int> выдает предупреждение об устаревании.

Ответы [ 2 ]

0 голосов
/ 21 июня 2018

Как сказал Ловис, вы не можете сделать это точно.

Однако, если вы хотите, чтобы ваша подпись сообщала, что ваш параметр не может быть просто Int, но должен быть @StringRes,@IdRes, @LayoutRes и т. Д., Вы можете использовать typealiases в качестве обходного пути.

В моем последнем проекте у меня был файл ResourceAnnotationAliases.kt, который только что определил это:

typealias StringRes = Int
typealias LayoutRes = Int
typealias IdRes = Int

Теперь вы можете дать своей паре подпись Pair<StringRes, Int>.

Конечно, он не покажет вам ошибку в IDE, когда вы введете Int, который не из R.string, но по крайней мере ваша сигнатура метода прояснит, что ожидается.

0 голосов
/ 07 июня 2018

Вы не можете.Проблема в том, что Android @StringRes не подходит для цели TYPE_USE (или TYPE в Kotlin).

Это будет работать, если это было определено следующим образом (java):

@Retention(SOURCE)
@Target({METHOD, PARAMETER, FIELD, TYPE_USE})
public @interface StringRes {
}

Теперь это будет работать:

fun fooIt(p: Pair<@StringRes Int, Foo>) {}

Существует открытая проблема: https://issuetracker.google.com/issues/109714923

Однако, возможно, ваше решение действительно работает, несмотря на предупреждение об устаревании,Я не проверял это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...