- java.lang.Object
-
- java.util.Objects
-
public final class Objects extends Object
此类包含static
实用程序方法,用于操作对象或在操作前检查某些条件。 这些实用程序包括null
或null
方法,用于计算对象的哈希代码,返回对象的字符串,比较两个对象,以及检查索引或子范围值是否超出范围。- API Note:
-
静态方法如
checkIndex(int, int)
,checkFromToIndex(int, int, int)
,和checkFromIndexSize(int, int, int)
提供用于如果对应于索引和子范围的值超出边界的检查的便利性。 这些静态方法的变体支持定义运行时异常以及相应的异常详细消息,这些消息在值超出范围时抛出。 此类方法接受功能接口参数,即BiFunction
实例,它将超出范围的值映射到运行时异常。 将这些方法与作为lambda表达式,方法引用或捕获值的类的参数结合使用时应小心。 在这种情况下,与功能接口分配相关的捕获成本可能超过检查边界的成本。 - 从以下版本开始:
- 1.7
-
-
方法摘要
所有方法 静态方法 具体的方法 变量和类型 方法 描述 static int
checkFromIndexSize(int fromIndex, int size, int length)
检查是否在子范围从fromIndex
(包括)到fromIndex + size
(不包括)是范围界限内0
(包括)到length
(不包括)。static int
checkFromToIndex(int fromIndex, int toIndex, int length)
检查是否在子范围从fromIndex
(包括)到toIndex
(不包括)是范围界限内0
(包括)到length
(不包括)。static int
checkIndex(int index, int length)
检查index
是否在0
(含)到length
(不包括)范围内。static <T> int
compare(T a, T b, Comparator<? super T> c)
如果参数相同则返回0,否则返回c.compare(a, b)
。static boolean
deepEquals(Object a, Object b)
返回true
如果参数是深层相等,彼此false
其他。static boolean
equals(Object a, Object b)
返回true
如果参数相等,彼此false
其他。static int
hash(Object... values)
为一系列输入值生成哈希码。static int
hashCode(Object o)
返回非的哈希码null
参数,0为null
的论点。static boolean
isNull(Object obj)
返回true
如果提供的参考是null
,否则返回false
。static boolean
nonNull(Object obj)
返回true
如果提供的参考是非null
否则返回false
。static <T> T
requireNonNull(T obj)
检查指定的对象引用是否不是null
。static <T> T
requireNonNull(T obj, String message)
检查指定的对象引用是否为null
,如果是,则抛出自定义的NullPointerException
。static <T> T
requireNonNull(T obj, Supplier<String> messageSupplier)
检查指定的对象引用是否为null
,如果是,则抛出自定义的NullPointerException
。static <T> T
requireNonNullElse(T obj, T defaultObj)
如果它是非null
,则返回第一个参数,否则返回非null
第二个参数。static <T> T
requireNonNullElseGet(T obj, Supplier<? extends T> supplier)
如果它是非null
,则返回第一个参数,否则返回非null
值supplier.get()
。static String
toString(Object o)
返回调用的结果toString
对于非null
参数,"null"
为null
的说法。static String
toString(Object o, String nullDefault)
如果第一个参数不是null
,则返回在第一个参数上调用toString
的结果,否则返回第二个参数。
-
-
-
方法详细信息
-
equals
public static boolean equals(Object a, Object b)
返回true
如果参数相等,彼此false
其他。 因此,如果这两个参数是null
,true
返回,如果只有一个参数为null
,false
返回。 否则,通过使用第一个参数的equals
方法确定相等性。- 参数
-
a
- 一个对象 -
b
- 要与a
进行比较以获得相等性的对象 - 结果
-
true
如果参数彼此相等,否则为false
- 另请参见:
-
Object.equals(Object)
-
deepEquals
public static boolean deepEquals(Object a, Object b)
返回true
如果参数是深层相等,彼此false
其他。 两个null
值非常相等。 如果两个参数都是数组,则使用Arrays.deepEquals
中的算法来确定相等性。 否则,通过使用第一个参数的equals
方法确定相等性。- 参数
-
a
- 一个物体 -
b
- 与a
进行比较的对象,用于深度相等 - 结果
-
true
如果参数彼此非常相等,false
- 另请参见:
-
Arrays.deepEquals(Object[], Object[])
,equals(Object, Object)
-
hashCode
public static int hashCode(Object o)
返回非的哈希码null
参数,0为null
的论点。- 参数
-
o
- 一个对象 - 结果
-
非的哈希码
null
参数,0为null
参数 - 另请参见:
-
Object.hashCode()
-
hash
public static int hash(Object... values)
为一系列输入值生成哈希码。 生成哈希码,好像所有输入值都放在一个数组中,并通过调用Arrays.hashCode(Object[])
对该数组进行哈希处理 。此方法对于在包含多个字段的对象上实现
Object.hashCode()
非常有用。 例如,如果有三个字段,对象x
,y
,和z
,一个可以这样写:@Override public int hashCode() { return Objects.hash(x, y, z); }
hashCode(Object)
来计算此值。- 参数
-
values
- 要散列的值 - 结果
- 输入值序列的哈希值
- 另请参见:
-
Arrays.hashCode(Object[])
,List.hashCode()
-
toString
public static String toString(Object o)
返回调用的结果toString
对于非null
参数,"null"
为null
的说法。- 参数
-
o
- 一个物体 - 结果
-
调用的结果
toString
对于非null
参数,"null"
为null
的说法 - 另请参见:
-
Object.toString()
,String.valueOf(Object)
-
toString
public static String toString(Object o, String nullDefault)
如果第一个参数不是null
,则返回在第一个参数上调用toString
的结果,否则返回第二个参数。- 参数
-
o
- 一个物体 -
nullDefault
- 如果第一个参数是null
,则返回的字符串 - 结果
-
如果它不是
null
,则在第一个参数上调用toString
,否则调用第二个参数。 - 另请参见:
-
toString(Object)
-
compare
public static <T> int compare(T a, T b, Comparator<? super T> c)
如果参数相同则返回0,否则返回c.compare(a, b)
。 因此,如果两个参数都是null
则返回0。请注意,如果其中一个参数为
null
,NullPointerException
可能会或可能不会抛出null
,具体取决于订购策略(如果有),Comparator
选择具有null
值。- 参数类型
-
T
- 要比较的对象的类型 - 参数
-
a
- 一个物体 -
b
- 要与a
进行比较的对象 -
c
- 比较前两个参数的Comparator
- 结果
-
如果参数相同
c.compare(a, b)
0,否则为c.compare(a, b)
。 - 另请参见:
-
Comparable
,Comparator
-
requireNonNull
public static <T> T requireNonNull(T obj)
检查指定的对象引用是否不是null
。 此方法主要用于在方法和构造函数中进行参数验证,如下所示:public Foo(Bar bar) { this.bar = Objects.requireNonNull(bar); }
- 参数类型
-
T
- 引用的类型 - 参数
-
obj
- 检查无效的对象引用 - 结果
-
obj
如果不是null
- 异常
-
NullPointerException
- 如果obj
是null
-
requireNonNull
public static <T> T requireNonNull(T obj, String message)
检查指定的对象引用是否为null
,如果是,则抛出自定义的NullPointerException
。 此方法主要用于在具有多个参数的方法和构造函数中进行参数验证,如下所示:public Foo(Bar bar, Baz baz) { this.bar = Objects.requireNonNull(bar, "bar must not be null"); this.baz = Objects.requireNonNull(baz, "baz must not be null"); }
- 参数类型
-
T
- 引用的类型 - 参数
-
obj
- 检查无效的对象引用 -
message
- 在抛出NullPointerException
的情况下使用的详细消息 - 结果
-
obj
若不是null
- 异常
-
NullPointerException
- 如果obj
是null
-
isNull
public static boolean isNull(Object obj)
返回true
如果提供的参考是null
,否则返回false
。
-
nonNull
public static boolean nonNull(Object obj)
返回true
如果提供的参考是非null
否则返回false
。
-
requireNonNullElse
public static <T> T requireNonNullElse(T obj, T defaultObj)
如果它是非null
,则返回第一个参数,否则返回非null
第二个参数。- 参数类型
-
T
- 引用的类型 - 参数
-
obj
- 一个物体 -
defaultObj
- 如果第一个参数为null
,则返回非null
对象 - 结果
-
第一个参数,如果它是非
null
,否则第二个参数,如果它是非null
- 异常
-
NullPointerException
- 如果两者都是obj
为空且defaultObj
为null
- 从以下版本开始:
- 9
-
requireNonNullElseGet
public static <T> T requireNonNullElseGet(T obj, Supplier<? extends T> supplier)
如果它是非null
,则返回第一个参数,否则返回非null
值supplier.get()
。- 参数类型
-
T
- 第一个参数和返回类型的类型 - 参数
-
obj
- 一个物体 -
supplier
- 如果第一个参数是null
,则返回非null
对象 - 结果
-
第一个参数,如果它是非
null
,否则值为supplier.get()
如果它是非null
- 异常
-
NullPointerException
- 如果两者obj
均为空且supplier
为null
或supplier.get()
值为null
- 从以下版本开始:
- 9
-
requireNonNull
public static <T> T requireNonNull(T obj, Supplier<String> messageSupplier)
检查指定的对象引用是否为null
,如果是,则抛出自定义的NullPointerException
。与方法
requireNonNull(Object, String)
不同,此方法允许创建要延迟的消息,直到进行空检查。 虽然这可以在非空情况下赋予性能优势,但在决定调用此方法时,应注意创建消息提供者的成本小于仅直接创建字符串消息的成本。- 参数类型
-
T
- 引用的类型 - 参数
-
obj
- 检查无效的对象引用 -
messageSupplier
- 如果抛出NullPointerException
,将使用详细消息的供应商 - 结果
-
obj
如果不是null
- 异常
-
NullPointerException
- 如果obj
是null
- 从以下版本开始:
- 1.8
-
checkIndex
public static int checkIndex(int index, int length)
检查index
是否在0
(含)到length
(不包括)范围内。如果以下任何不等式为真,则定义
index
超出范围:-
index < 0
-
index >= length
-
length < 0
,这是前者的不平等所暗示的
- 参数
-
index
- 该指数 -
length
- 范围的上限(不包括) - 结果
-
index
如果它在范围的范围内 - 异常
-
IndexOutOfBoundsException
- 如果index
超出界限 - 从以下版本开始:
- 9
-
-
checkFromToIndex
public static int checkFromToIndex(int fromIndex, int toIndex, int length)
检查是否在子范围从fromIndex
(包括)到toIndex
(不包括)是范围界限内0
(包括)到length
(不包括)。如果以下任何不等式为真,则子范围被定义为超出界限:
-
fromIndex < 0
-
fromIndex > toIndex
-
toIndex > length
-
length < 0
,这是前者的不平等所暗示的
- 参数
-
fromIndex
- 子范围的下限(包括) -
toIndex
- 子范围的上限(不包括) -
length
- 上限(不包括)范围 - 结果
-
fromIndex
如果子范围内的范围内 - 异常
-
IndexOutOfBoundsException
- 如果子范围超出范围 - 从以下版本开始:
- 9
-
-
checkFromIndexSize
public static int checkFromIndexSize(int fromIndex, int size, int length)
检查是否在子范围从fromIndex
(包括)到fromIndex + size
(不包括)是范围界限内0
(包括)到length
(不包括)。如果以下任何不等式为真,则子范围被定义为超出界限:
-
fromIndex < 0
-
size < 0
-
fromIndex + size > length
,考虑到整数溢出 -
length < 0
,这是前者的不平等所暗示的
- 参数
-
fromIndex
- 子间隔的下限(包括) -
size
- 子范围的大小 -
length
- 范围的上限(不包括) - 结果
-
fromIndex
如果子范围在范围的范围内 - 异常
-
IndexOutOfBoundsException
- 如果子范围超出范围 - 从以下版本开始:
- 9
-
-
-