Java 为我们提供了一些非常好用的工具类。
实际上我们对它们并不陌生,之前我们见到过它们的:
Arrays.asList
Collections.singletonList
Objects.requireNonNull
等等。这一节我们介绍一些插件开发常用的。
?> 这些都是静态方法
下面介绍的方法都是静态方法,也就是要通过 <类名>.<方法>
进行调用,例如 Objects.requireNonNull
,Collections.reverse
。
该方法用于确认得到的对象不是 null
:
public static <T> T requireNonNull(T obj)
如果不是 null
,它将原封不动返回,否则抛出 NullPointerException
。
上面那个方法的变种,适合用于判断得到的对象是不是 null
,如果是,它将返回设定的默认值。
public static <T> T requireNonNullElse(T obj, T defaultObj)
这和一般的 equals
一样,判断两个对象是否相同,但它避免了 NullPointerException
,示例:
a.equals(b);
// 不好,如果 a 是 null 将触发 NullPointerException
Objects.equals(a, b);
// 这样多好!
Arrays
类被设计用于处理数组(如 String[]
),但它还有很多功能。
该方法用于将一个数组排序,可以排序的类型包括任何种类的数字数组、char[]
和 Comparable[]
(亦即实现了 Comparable
接口的)。
public static void sort(Object[] input)
该方法是就地修改,调用后无返回值。
该方法使用指定的值填充一个数组,就地修改。
public static void fill(Object[] a, Object val)
public static void fill(Object[] a, int fromIndex, int toIndex, Object val)
第一个方法填充整个数组,第二个仅填充指定区间(取头不取尾)。
使用二分法查找某个对象在数组中的位置。
public static int binarySearch(Object[] a, long key)
将数组转换为字符串形式。
public static String toString(Object[] a)
这个我们已经用过了,快速生成一个 List
(内部实现是 ArrayList
)。
public static <T> List<T> asList(T... a)
这个方法也可以将数组转换为 List
,从而使得上面这些功能可以同时与下面即将介绍到的这个类一起使用……
Collections
用于对集合进行操作,但现在几乎只用于 List
,性能很高。
以最低的成本,创建空的只读 List
。
public static final <T> List<T> emptyList()
以最低的成本,创建只有一项的只读 List
。
public static <T> List<T> singletonList(T o)
将 List
倒序过来,这是就地修改。
public static void reverse(List<?> list)
将 List
随机排序,相当于「洗牌」,就地修改。
public static void shuffle(List<?> list)
和 Arrays.sort
很像,只不过目标是 List
,按照元素的「自然」顺序排序,就地修改。
public static <T extends Comparable<? super T>> void sort(List<T> list)
// 意思就是要被排序的必须实现了 Comparable 接口
交换 List
中指定的两个位置上的元素,就地修改。
public static void swap(List<?> list, int i, int j)
将 List
切成两块,交换顺序后重新粘起来,就地修改。
public static void rotate(List<?> list, int distance)
当 distance
为正数时,将后 distance
个元素一起切下来,移到前面,反之,将前 distance
个元素移到后面(有什么区别!)。
可以看到,虽然不是很多,但这些功能都超级有用的!
下面的三节中,我们将自己来编写一些这样的工具类,并且最终能够用于后面的插件开发,想想很快就能摆脱恐怖的 getItemMeta
,我也很开心呢~