【发布时间】:2016-04-21 05:31:20
【问题描述】:
可能是一个愚蠢的问题,但是...From the docs,我知道在 java 中我在java.lang.Class<T> 上有一个名为getFields() 的方法,它将返回一个Field 对象数组,我也知道结果根本没有以任何方式排序。
返回一个包含反映所有字段对象的数组 由 this 表示的类或接口的可访问公共字段 类对象。返回的数组中的元素未排序,并且 没有任何特定的顺序。该方法返回一个数组 如果类或接口没有可访问的公共字段,则长度为 0,或者 如果它表示数组类、原始类型或 void。
现在,如果我想对这些字段进行排序怎么办?有没有一种方法可以为我返回它们?还是我必须自己整理?
来自this question 我知道我可以使用Comparator 对它们进行排序。我只是想知道我是否真的需要自己做这个额外的步骤。
【问题讨论】:
-
标准 JDK 没有任何方法可以满足您的需求,因此如果您仅限于 JDK,则只需执行此额外步骤。现在,如果您对外部库感兴趣,我发现了类似 stackoverflow.com/a/15075633/1393766 的内容。
-
您会寻找什么样的一般解决方案,无需您对它们进行排序即可对它们进行排序?我并不是要轻率,但是如果它们没有排序,并且您希望它们排序……您需要对它们进行排序。也就是说,如果您不想编写 Comparator,您可能需要查看 Guava 的 Ordering.usingToString()。
-
"如果你不想写 Comparator" 类似的东西哈哈。我的好奇多于懒惰。此外,Guava 提供了不错的解决方案。
-
额外的步骤可能看起来像
Arrays.sort(fields, comparing(Field::getName));- 看起来还不错,是吗? -
@assylias 应该可能会发布一个答案。