Skip to content

Latest commit

 

History

History
165 lines (101 loc) · 4.05 KB

6-1.md

File metadata and controls

165 lines (101 loc) · 4.05 KB

6-1 Java 中的一些工具类

Java 为我们提供了一些非常好用的工具类。

实际上我们对它们并不陌生,之前我们见到过它们的:

  • Arrays.asList
  • Collections.singletonList
  • Objects.requireNonNull

等等。这一节我们介绍一些插件开发常用的。

?> 这些都是静态方法
下面介绍的方法都是静态方法,也就是要通过 <类名>.<方法> 进行调用,例如 Objects.requireNonNullCollections.reverse

Objects

requireNonNull

该方法用于确认得到的对象不是 null

public static <T> T requireNonNull(T obj)

如果不是 null,它将原封不动返回,否则抛出 NullPointerException

requireNonNullElse

上面那个方法的变种,适合用于判断得到的对象是不是 null,如果是,它将返回设定的默认值。

public static <T> T requireNonNullElse(T obj, T defaultObj)

equals

这和一般的 equals 一样,判断两个对象是否相同,但它避免了 NullPointerException,示例:

a.equals(b);
// 不好,如果 a 是 null 将触发 NullPointerException

Objects.equals(a, b);
// 这样多好!

Arrays

Arrays 类被设计用于处理数组(如 String[]),但它还有很多功能。

sort

该方法用于将一个数组排序,可以排序的类型包括任何种类的数字数组、char[]Comparable[](亦即实现了 Comparable 接口的)。

public static void sort(Object[] input)

该方法是就地修改,调用后无返回值。

fill

该方法使用指定的值填充一个数组,就地修改。

public static void fill(Object[] a, Object val)
public static void fill(Object[] a, int fromIndex, int toIndex, Object val)

第一个方法填充整个数组,第二个仅填充指定区间(取头不取尾)。

binarySearch

使用二分法查找某个对象在数组中的位置。

public static int binarySearch(Object[] a, long key)

toString

将数组转换为字符串形式。

public static String toString(Object[] a)

asList

这个我们已经用过了,快速生成一个 List(内部实现是 ArrayList)。

public static <T> List<T> asList(T... a)

这个方法也可以将数组转换为 List,从而使得上面这些功能可以同时与下面即将介绍到的这个类一起使用……

Collections

Collections 用于对集合进行操作,但现在几乎只用于 List,性能很高。

emptyList

以最低的成本,创建空的只读 List

public static final <T> List<T> emptyList()

singletonList

以最低的成本,创建只有一项的只读 List

public static <T> List<T> singletonList(T o)

reverse

List 倒序过来,这是就地修改。

public static void reverse(List<?> list)

shuffle

List 随机排序,相当于「洗牌」,就地修改。

public static void shuffle(List<?> list)

sort

Arrays.sort 很像,只不过目标是 List,按照元素的「自然」顺序排序,就地修改。

public static <T extends Comparable<? super T>> void sort(List<T> list)
// 意思就是要被排序的必须实现了 Comparable 接口

swap

交换 List 中指定的两个位置上的元素,就地修改。

public static void swap(List<?> list, int i, int j)

rotate

List 切成两块,交换顺序后重新粘起来,就地修改。

public static void rotate(List<?> list, int distance)

distance 为正数时,将后 distance 个元素一起切下来,移到前面,反之,将前 distance 个元素移到后面(有什么区别!)。


可以看到,虽然不是很多,但这些功能都超级有用的!

下面的三节中,我们将自己来编写一些这样的工具类,并且最终能够用于后面的插件开发,想想很快就能摆脱恐怖的 getItemMeta,我也很开心呢~