Java >> Java tutorial >  >> Tag >> java.util

Java 9 java.util.Objects Tilføjelser

1. Introduktion

Java.util.Objects klasse har været en del af Java siden version 1.7. Denne klasse giver statiske hjælpemetoder til objekter, som kan bruges til at udføre nogle af de daglige opgaver som at kontrollere for lighed, null checks osv.

I denne artikel vil vi se på de nye metoder introduceret i java.util.Objects klasse i Java 9.

2. requireNonNullElse Metode

Denne metode accepterer to parametre og returnerer den første parameter, hvis den ikke er null , den anden parameter ellers. Hvis begge parametre er null , det kaster NullPointerException :

private List<String> aMethodReturningNullList(){
    return null;
}

@Test
public void givenNullObject_whenRequireNonNullElse_thenElse() {
    List<String> aList = Objects.<List>requireNonNullElse(
      aMethodReturningNullList(), Collections.EMPTY_LIST);
 
    assertThat(aList, is(Collections.EMPTY_LIST));
}

private List<String> aMethodReturningNonNullList() {
    return List.of("item1", "item2");
}

@Test
public void givenObject_whenRequireNonNullElse_thenObject() {
    List<String> aList = Objects.<List>requireNonNullElse(
      aMethodReturningNonNullList(), Collections.EMPTY_LIST);
 
    assertThat(aList, is(List.of("item1", "item2")));
}

@Test(expected = NullPointerException.class)
public void givenNull_whenRequireNonNullElse_thenException() {
    Objects.<List>requireNonNullElse(null, null);
}

3. Brug af requireNonNullElseGet

Denne metode ligner requireNonNullElse , bortset fra at den anden parameter er en java.util.function.Supplier grænseflade, som tillader en doven instansiering af den leverede samling. Leverandøren implementering er ansvarlig for at returnere et ikke-null objekt som vist nedenfor:

@Test
public void givenObject_whenRequireNonNullElseGet_thenObject() {
    List<String> aList = Objects.<List>requireNonNullElseGet(
      null, List::of);
    assertThat(aList, is(List.of()));
}

4. Brug af checkIndex

Denne metode bruges til at kontrollere, om indekset er inden for den givne længde. Det returnerer indekset hvis 0 <=indeks . Ellers kaster den en IndexOutOfBoundsException som vist nedenfor:

@Test
public void givenNumber_whenInvokeCheckIndex_thenNumber() {
    int length = 5;
 
    assertThat(Objects.checkIndex(4, length), is(4));
}

@Test(expected = IndexOutOfBoundsException.class)
public void givenOutOfRangeNumber_whenInvokeCheckIndex_thenException() {
    int length = 5;
    Objects.checkIndex(5, length);
}

5. Brug af checkFromToIndex

Denne metode bruges til at kontrollere, om det givne underområde dannet af [fromIndex, toIndex) er inden for området dannet af [0, længde) . Hvis underområdet er gyldigt, returnerer det den nedre grænse som vist nedenfor:

@Test
public void givenSubRange_whenCheckFromToIndex_thenNumber() {
    int length = 6;
 
    assertThat(Objects.checkFromToIndex(2,length,length), is(2));
}

@Test(expected = IndexOutOfBoundsException.class)
public void givenInvalidSubRange_whenCheckFromToIndex_thenException() {
    int length = 6;
    Objects.checkFromToIndex(2,7,length);
}

Bemærk:I matematik angiver et interval repræsenteret i form af [a, b) at området er inklusive a og eksklusive b. [ og ] angiver, at nummeret er inkluderet og ( og ) angiver, at nummeret er udeladt.

6. Brug af checkFromIndexSize

Denne metode ligner checkFromToIndex bortset fra, at i stedet for at angive den øvre grænse for underområdet, angiver vi størrelsen og den nedre grænse for underområdet.

Underområdet er i dette tilfælde [fromIndex, fromIndex + size) og denne metode kontrollerer, at underområdet er inden for området dannet af [0, længde) :

@Test
public void givenSubRange_whenCheckFromIndexSize_thenNumber() {
    int length = 6;
 
    assertThat(Objects.checkFromIndexSize(2,3,length), is(2));
}

@Test(expected = IndexOutOfBoundsException.class)
public void givenInvalidSubRange_whenCheckFromIndexSize_thenException() {
    int length = 6;
    Objects.checkFromIndexSize(2, 6, length);
}

7. Konklusion

java.util.Objects klasse i JDK 9 dækker få nye hjælpemetoder. Det er også opmuntrende, fordi denne serviceklasse er blevet opdateret jævnligt, siden den blev introduceret i Java 7.

Koden til denne artikel kan findes på GitHub.


Java tag