Как я могу сопоставить типы конструктора с Java отражением с Scala примитивными типами? - PullRequest
0 голосов
/ 29 января 2020

Скажите, у меня есть этот класс:

case class Person(name: String, age: Int)

Я хочу отразить класс во время выполнения, используя отражение Java (не Scala). (Это потому, что я работаю над библиотекой Dotty, которая имеет stati c, но не отражение во время выполнения.)

Я могу знать типы аргументов моего конструктора: java .lang. Строка и Scala .Int. Но когда я размышляю о Личности:

classOf[Person].getConstructors.toList
// List(public com.mypkg.sub.Person(java.lang.String,int))

Видите это "int" там? Это приводит к тому, что я не могу найти соответствующий конструктор. Используя Java отражение в классе, я могу искать конструктор, если знаю типы. Как я могу попросить Int? В некоторых публикациях в других местах предлагается использовать Integer.TYPE, но это разрешает Scala .Int для меня.

Как мне успешно позвонить clazz.getConstructor(???)?

1 Ответ

2 голосов
/ 29 января 2020

Запросите его ClassTag:

scala> implicitly[reflect.ClassTag[Int]].runtimeClass eq java.lang.Integer.TYPE                                                                     
val res3: Boolean = true
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...