2016-01-15 2 views
1

Может быть, глупый вопрос, но ... From the docs, я знаю, что в java у меня есть этот метод под названием getFields() на java.lang.Class<T>, который вернет массив объектов Field, и я также знаю, что результаты не отсортированы каким-либо образом вообще.Можно ли получить поля классов отсортированным способом?

Возвращает массив, содержащий объекты Field, отражающие все доступные открытые поля класса или интерфейса, представленного данным объектом класса. Элементы возвращаемого массива не сортируются, а не указаны в определенном порядке. Этот метод возвращает массив length 0, если класс или интерфейс не имеет доступных общедоступных полей, или , если он представляет класс массива, примитивный тип или void.

Теперь, если бы я хотел, чтобы эти поля были отсортированы? Есть ли способ, который вернет их мне? Или мне нужно самому разобраться?

От this question Я знаю, что могу сортировать их, используя Comparator. Я просто хочу знать, действительно ли мне нужно сделать этот дополнительный шаг.

+1

В стандартном JDK нет никакого метода, который будет делать то, что вы хотите, поэтому, если вы ограничены только JDK, вам нужно сделать этот дополнительный шаг. На данный момент я нашел что-то вроде http://stackoverflow.com/a/15075633/1393766, если вас интересуют внешние библиотеки. – Pshemo

+0

Какую общую форму решения вы бы искали, которая сортирует их, не сортируя их? Я не пытаюсь быть легкомысленным, но если они не отсортированы, и вы хотите, чтобы они отсортировались ... вам нужно их отсортировать. Тем не менее, если вы просто не хотите писать Компаратор, вы можете захотеть взглянуть на [Ordering.usingToString()] Guava (http://docs.guava-libraries.googlecode.com/git/javadoc/com/ Google/общие/собирать/Ordering.html # usingToString()). – yshavit

+0

«если вы просто не хотите писать Компаратор» Что-то вроде этого ха-ха. Мне было любопытно, чем лениться. Кроме того, хорошее решение от Guava. – Mauker

ответ

2

Сортировка массива объектов на основе свойства могут быть записаны в одной строке:

Field[] fields = String.class.getDeclaredFields(); 
Arrays.sort(fields, comparing(Field::getName)); 

с использованием статического импорта: import static java.util.Comparator.comparing;.

+0

А что касается других комментариев, я знаю, что мне нужно их сортировать, и вы показали мне очень хороший способ сделать это. Благодаря! – Mauker

+1

Обратите внимание, что для этого решения требуется Java 1.8 или новее. Если вы используете более раннюю версию, это не сработает: 'java.util.Comparator.comparing' и' java.util.function.Function' были введены в 1.8. (У нас все еще есть несколько старых серверов, на которых работает Java 1.6, где я работаю ...) –

+0

О, это важно помнить. – Mauker

Смежные вопросы