Java : Objects (オブジェクト操作) - API使用例
Objects (Java SE 18 & JDK 18) の使用例まとめです。
だいたいのメソッドを網羅済みです。
API仕様のおともにどうぞ。
概要
final String str1 = null;
final String str2 = "abcd";
System.out.println(Objects.equals(str1, str2)); // false
System.out.println(Objects.equals(str1, null)); // true
System.out.println(Objects.equals(str2, "abcd")); // true
System.out.println(Objects.hash(123, 789, "abc")); // 268807
final var list = new ArrayList<String>();
list.add("a");
list.add(null);
list.add("b");
list.add(null);
list.add("c");
System.out.println(list); // [a, null, b, null, c]
final var result = list.stream().filter(Objects::nonNull).toList();
System.out.println(result); // [a, b, c]
メソッド
static int checkFromIndexSize (int fromIndex, int size, int length)
基準となるのは 0~(length-1) の範囲。
その範囲に、fromIndex + (size-1) の範囲がすべて入っているかどうかをチェックします。
範囲内に入っていれば fromIndex の値が返ります。
それ以外は IndexOutOfBoundsException が発生します。
System.out.println(Objects.checkFromIndexSize(0, 0, 5)); // 0
System.out.println(Objects.checkFromIndexSize(0, 1, 5)); // 0
System.out.println(Objects.checkFromIndexSize(0, 2, 5)); // 0
System.out.println(Objects.checkFromIndexSize(0, 3, 5)); // 0
System.out.println(Objects.checkFromIndexSize(0, 4, 5)); // 0
System.out.println(Objects.checkFromIndexSize(0, 5, 5)); // 0
//Objects.checkFromIndexSize(0, 6, 5); // IndexOutOfBoundsException
System.out.println(Objects.checkFromIndexSize(3, 0, 5)); // 3
System.out.println(Objects.checkFromIndexSize(3, 1, 5)); // 3
System.out.println(Objects.checkFromIndexSize(3, 2, 5)); // 3
//Objects.checkFromIndexSize(3, 3, 5); // IndexOutOfBoundsException
System.out.println(Objects.checkFromIndexSize(0, 1, 5)); // 0
System.out.println(Objects.checkFromIndexSize(1, 1, 5)); // 1
System.out.println(Objects.checkFromIndexSize(2, 1, 5)); // 2
System.out.println(Objects.checkFromIndexSize(3, 1, 5)); // 3
System.out.println(Objects.checkFromIndexSize(4, 1, 5)); // 4
//Objects.checkFromIndexSize(5, 1, 5); // IndexOutOfBoundsException
//Objects.checkFromIndexSize(-1, 0, 5); // IndexOutOfBoundsException
//Objects.checkFromIndexSize(0, -1, 5); // IndexOutOfBoundsException
//Objects.checkFromIndexSize(0, 0, -1); // IndexOutOfBoundsException
static long checkFromIndexSize (long fromIndex, long size, long length)
型が long であること以外は checkFromIndexSize(int fromIndex, int size, int length) と同じです。
そちらのAPI使用例をご参照ください。
static int checkFromToIndex (int fromIndex, int toIndex, int length)
基準となるのは 0~(length-1) の範囲。
その範囲に、fromIndex~(toIndex-1) の範囲がすべて入っているかどうかをチェックします。
範囲内に入っていれば fromIndex の値が返ります。
それ以外は IndexOutOfBoundsException が発生します。
System.out.println(Objects.checkFromToIndex(0, 0, 5)); // 0
System.out.println(Objects.checkFromToIndex(0, 1, 5)); // 0
System.out.println(Objects.checkFromToIndex(0, 2, 5)); // 0
System.out.println(Objects.checkFromToIndex(0, 3, 5)); // 0
System.out.println(Objects.checkFromToIndex(0, 4, 5)); // 0
System.out.println(Objects.checkFromToIndex(0, 5, 5)); // 0
//Objects.checkFromToIndex(0, 6, 5); // IndexOutOfBoundsException
//Objects.checkFromToIndex(3, 2, 5); // IndexOutOfBoundsException
System.out.println(Objects.checkFromToIndex(3, 3, 5)); // 3
System.out.println(Objects.checkFromToIndex(3, 4, 5)); // 3
System.out.println(Objects.checkFromToIndex(3, 5, 5)); // 3
//Objects.checkFromToIndex(3, 6, 5); // IndexOutOfBoundsException
System.out.println(Objects.checkFromToIndex(0, 5, 5)); // 0
System.out.println(Objects.checkFromToIndex(1, 5, 5)); // 1
System.out.println(Objects.checkFromToIndex(2, 5, 5)); // 2
System.out.println(Objects.checkFromToIndex(3, 5, 5)); // 3
System.out.println(Objects.checkFromToIndex(4, 5, 5)); // 4
System.out.println(Objects.checkFromToIndex(5, 5, 5)); // 5
//Objects.checkFromToIndex(6, 5, 5); // IndexOutOfBoundsException
//Objects.checkFromToIndex(-1, 0, 5); // IndexOutOfBoundsException
//Objects.checkFromToIndex(0, -1, 5); // IndexOutOfBoundsException
//Objects.checkFromToIndex(0, 0, -1); // IndexOutOfBoundsException
static long checkFromToIndex (long fromIndex, long toIndex, long length)
型が long であること以外は checkFromToIndex(int fromIndex, int toIndex, int length) と同じです。
そちらのAPI使用例をご参照ください。
static int checkIndex (int index, int length)
index が 0~(length-1) の場合は、index がそのまま返ります。
それ以外は IndexOutOfBoundsException が発生します。
//Objects.checkIndex(-1, 5); // IndexOutOfBoundsException
System.out.println(Objects.checkIndex(0, 5)); // 0
System.out.println(Objects.checkIndex(1, 5)); // 1
System.out.println(Objects.checkIndex(2, 5)); // 2
System.out.println(Objects.checkIndex(3, 5)); // 3
System.out.println(Objects.checkIndex(4, 5)); // 4
//Objects.checkIndex(5, 5); // IndexOutOfBoundsException
//Objects.checkIndex(0, 0); // IndexOutOfBoundsException
//Objects.checkIndex(0, -1); // IndexOutOfBoundsException
static long checkIndex (long index, long length)
型が long であること以外は checkIndex(int index, int length) と同じです。
そちらのAPI使用例をご参照ください。
static <T> int compare (T a, T b, Comparator<? super T> c)
final var c = new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
if (o1 < o2) {
return -1;
} else if (o1 > o2) {
return 1;
} else {
return 0;
}
}
};
System.out.println(Objects.compare(null, null, c)); // 0
System.out.println(Objects.compare(0, 5, c)); // -1
System.out.println(Objects.compare(5, 0, c)); // 1
System.out.println(Objects.compare(123, 123, c)); // 0
static boolean deepEquals (Object a, Object b)
"深層"というのは多次元の配列にも対応している、という意味。
final var str1 = "aaa";
final var str2 = "aaa";
System.out.println(Objects.equals(str1, str2)); // true
System.out.println(Objects.deepEquals(str1, str2)); // true
final var str3 = "bbb";
System.out.println(Objects.equals(str1, str3)); // false
System.out.println(Objects.deepEquals(str1, str3)); // false
final String[] array1 = {"a", "b", "c"};
final String[] array2 = {"a", "b", "c"};
System.out.println(Objects.equals(array1, array2)); // false
System.out.println(Objects.deepEquals(array1, array2)); // true
final String[] array3 = {"x", "y", "z"};
System.out.println(Objects.equals(array1, array3)); // false
System.out.println(Objects.deepEquals(array1, array3)); // false
final int[][] array1 = {
{1, 2}, {3, 4},
{5, 6}, {7, 8}
};
final int[][] array2 = {
{1, 2}, {3, 4},
{5, 6}, {7, 8}
};
System.out.println(Objects.equals(array1, array2)); // false
System.out.println(Objects.deepEquals(array1, array2)); // true
final int[][] array3 = {
{1, 2}, {3, 4},
{100, 200}, {300, 400}
};
System.out.println(Objects.equals(array1, array3)); // false
System.out.println(Objects.deepEquals(array1, array3)); // false
System.out.println(Objects.deepEquals(null, null)); // true
System.out.println(Objects.deepEquals(null, 1)); // false
System.out.println(Objects.deepEquals(2, null)); // false
static boolean equals (Object a, Object b)
System.out.println(Objects.equals(1, 2)); // false
System.out.println(Objects.equals(3, 3)); // true
System.out.println(Objects.equals("abc", "def")); // false
System.out.println(Objects.equals("xxx", "xxx")); // true
System.out.println(Objects.equals("123", 123)); // false
System.out.println(Objects.equals(null, null)); // true
System.out.println(Objects.equals(null, 1)); // false
System.out.println(Objects.equals(2, null)); // false
final String[] array1 = {"a", "b", "c"};
final String[] array2 = {"a", "b", "c"};
System.out.println(Objects.equals(array1, array2)); // false
System.out.println(Objects.deepEquals(array1, array2)); // true
static int hash (Object... values)
System.out.println(Objects.hash(1)); // 32
System.out.println(Objects.hash(1, 2)); // 994
System.out.println(Objects.hash(2, 1)); // 1024
System.out.println(Objects.hash(1, 2, 3)); // 30817
System.out.println(Objects.hash("a", "b", "c")); // 126145
System.out.println(Objects.hash(1, 2, 3, "a", "b", "c")); // 918165601
// 配列はインスタンスのhashCodeが使われます。
// もし配列の内容を考慮したhashCodeが欲しい場合は、Arrays.hashCodeを使用してください。
final int[] array1 = {1, 2, 3};
final int[] array2 = {1, 2, 3};
final int[] array3 = {4, 5, 6};
System.out.println(Objects.hash(array1)); // 1544785573
System.out.println(Objects.hash(array2)); // 664022656
System.out.println(Objects.hash(array3)); // 1426882641
System.out.println(Arrays.hashCode(array1)); // 30817
System.out.println(Arrays.hashCode(array2)); // 30817
static int hashCode (Object o)
System.out.println(Objects.hashCode(null)); // 0
System.out.println(Objects.hashCode(123)); // 123
System.out.println(Objects.hashCode("abc")); // 96354
// 配列はインスタンスのhashCodeが使われます。
// もし配列の内容を考慮したhashCodeが欲しい場合は、Arrays.hashCodeを使用してください。
final int[] array1 = {1, 2, 3};
final int[] array2 = {1, 2, 3};
final int[] array3 = {4, 5, 6};
System.out.println(Objects.hashCode(array1)); // 1129405362
System.out.println(Objects.hashCode(array2)); // 556034497
System.out.println(Objects.hashCode(array3)); // 606135032
System.out.println(Arrays.hashCode(array1)); // 30817
System.out.println(Arrays.hashCode(array2)); // 30817
static boolean isNull (Object obj)
System.out.println(Objects.isNull(null)); // true
System.out.println(Objects.isNull(123)); // false
System.out.println(Objects.isNull("abc")); // false
final var list = new ArrayList<String>();
list.add("a");
list.add(null);
list.add("b");
list.add(null);
list.add("c");
System.out.println(list); // [a, null, b, null, c]
final var result = list.stream().filter(Objects::isNull).toList();
System.out.println(result); // [null, null]
static boolean nonNull (Object obj)
System.out.println(Objects.nonNull(null)); // false
System.out.println(Objects.nonNull(123)); // true
System.out.println(Objects.nonNull("abc")); // true
final var list = new ArrayList<String>();
list.add("a");
list.add(null);
list.add("b");
list.add(null);
list.add("c");
System.out.println(list); // [a, null, b, null, c]
final var result = list.stream().filter(Objects::nonNull).toList();
System.out.println(result); // [a, b, c]
static <T> T requireNonNull (T obj)
主に、コンストラクタやメソッドのパラメータ検証(nullチェック)のために使います。
class Book {
private final String title;
private final String content;
Book(String title, String content) {
this.title = Objects.requireNonNull(title);
this.content = Objects.requireNonNull(content);
}
@Override
public String toString() {
return "title : " + title + ", content : " + content;
}
}
//new Book(null, "abcd"); // NullPointerException
//new Book("XYZ", null); // NullPointerException
final var book = new Book("XYZ", "abcd");
System.out.println(book); // title : XYZ, content : abcd
static <T> T requireNonNull (T obj, String message)
主に、コンストラクタやメソッドのパラメータ検証(nullチェック)のために使います。
class Book {
private final String title;
private final String content;
Book(String title, String content) {
this.title = Objects.requireNonNull(title, "title must not be null");
this.content = Objects.requireNonNull(content, "content must not be null");
}
@Override
public String toString() {
return "title : " + title + ", content : " + content;
}
}
//new Book(null, "abcd"); // NullPointerException: title must not be null
//new Book("XYZ", null); // NullPointerException: content must not be null
final var book = new Book("XYZ", "abcd");
System.out.println(book); // title : XYZ, content : abcd
static <T> T requireNonNull (T obj, Supplier<String> messageSupplier)
主に、コンストラクタやメソッドのパラメータ検証(nullチェック)のために使います。
class Book {
private final String title;
private final String content;
Book(String title, String content) {
this.title = Objects.requireNonNull(title, () -> "title must not be null");
this.content = Objects.requireNonNull(content, () -> "content must not be null");
}
@Override
public String toString() {
return "title : " + title + ", content : " + content;
}
}
//new Book(null, "abcd"); // NullPointerException: title must not be null
//new Book("XYZ", null); // NullPointerException: content must not be null
final var book = new Book("XYZ", "abcd");
System.out.println(book); // title : XYZ, content : abcd
static <T> T requireNonNullElse (T obj, T defaultObj)
class Book {
private final String title;
private final String content;
Book(String title, String content) {
this.title = Objects.requireNonNullElse(title, "default title");
this.content = Objects.requireNonNullElse(content, "default content");
}
@Override
public String toString() {
return "title : " + title + ", content : " + content;
}
}
final var book1 = new Book(null, "abcd");
System.out.println(book1); // title : default title, content : abcd
final var book2 = new Book("XYZ", null);
System.out.println(book2); // title : XYZ, content : default content
final var book3 = new Book("XYZ", "abcd");
System.out.println(book3); // title : XYZ, content : abcd
static <T> T requireNonNullElseGet (T obj, Supplier<? extends T> supplier)
class Book {
private final String title;
private final String content;
Book(String title, String content) {
this.title = Objects.requireNonNullElseGet(title, () -> "default title");
this.content = Objects.requireNonNullElseGet(content, () -> "default content");
}
@Override
public String toString() {
return "title : " + title + ", content : " + content;
}
}
final var book1 = new Book(null, "abcd");
System.out.println(book1); // title : default title, content : abcd
final var book2 = new Book("XYZ", null);
System.out.println(book2); // title : XYZ, content : default content
final var book3 = new Book("XYZ", "abcd");
System.out.println(book3); // title : XYZ, content : abcd
static String toString (Object o)
final var str1 = Objects.toString(null);
System.out.println(str1); // "null"
final var str2 = Objects.toString(123);
System.out.println(str2); // "123"
final var str3 = Objects.toString("abcd");
System.out.println(str3); // "abcd"
static String toString (Object o, String nullDefault)
final var str1 = Objects.toString(null, "XYZ");
System.out.println(str1); // "XYZ"
final var str2 = Objects.toString(123, "XYZ");
System.out.println(str2); // "123"
final var str3 = Objects.toString("abcd", "XYZ");
System.out.println(str3); // "abcd"
関連記事
- API 使用例