Можем ли мы получить объявленные свойства класса Groovy по его порядку? - PullRequest
2 голосов
/ 20 мая 2011


Я создал простой класс Groovy (т.е. класс Person) с некоторыми свойствами.Теперь я хочу получить эти объявленные атрибуты (которые я определил в своем классе) с их порядком, но я не знаю, как это сделать.
Я пытался использовать Person.metaClass.getProperties (), ноон извлекает не только объявленные свойства, но и встроенные в Groovy.
Не могли бы вы помочь мне в этом: просто получите объявленные свойства по порядку при объявлении.
Большое спасибо!

Ответы [ 2 ]

8 голосов
/ 20 мая 2011

Я не вижу варианта использования, но компилятор может переупорядочить объявление всех полей при создании байт-кода.Я почти уверен, что упорядочение не является ограничением для полей, хотя в основном это относится к неизмененному / расширенному классу

Согласно спецификации JVM, сгенерированные поля должны быть помечены как SYNTHETIC (как сгенерированные методы) вбайт-код, так что вы можете проверить с помощью:

Person.getDeclaredFields().grep {  !it.synthetic }

и отфильтровать базовые поля Groovy, такие как ClassInfo, metaClass и другие, начиная с __timestamp

Но я не специалист, можетбыть другим способом, я не думаю о

2 голосов
/ 20 мая 2011

Был вопрос об этом в списке рассылки еще в феврале этого года

Ответ - нет.Невозможно получить свойства в том порядке, в котором они объявлены в классе, не выполняя дополнительную работу.

  1. Вы можете проанализировать исходный файл для класса и сгенерировать упорядоченный список имен свойств изчто
  2. Вы можете написать пользовательскую аннотацию и аннотировать поля этой аннотацией, например: @Order(1) String prop
  3. Вы можете сделать все классы, где это важно, реализовать интерфейс, который заставляет их иметьметод, который возвращает имена свойств по порядку.

Кроме этого, вы, вероятно, захотите переосмыслить: - (

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