Skip to content

Commit 7478458

Browse files
authored
feat(option-null-equals): override equals in optional-nullable wrapper (#72)
- Added equals() method: Implemented the equals() method in the OptionalNullable Class. It is used to compare the equality of objects based on the value of wrapped field. - Added hashCode() method: Implemented the hashCode() method in the OptionalNullable Class. It calculates a unique numeric value, known as the hash code, for the wrapped inner value.
1 parent c9d50ef commit 7478458

2 files changed

Lines changed: 66 additions & 2 deletions

File tree

src/main/java/io/apimatic/core/types/OptionalNullable.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,12 @@
55
import java.time.LocalDateTime;
66
import java.util.List;
77
import java.util.Map;
8+
import java.util.Objects;
9+
810
import com.fasterxml.jackson.core.JsonGenerator;
911
import com.fasterxml.jackson.databind.JsonSerializer;
1012
import com.fasterxml.jackson.databind.SerializerProvider;
13+
1114
import io.apimatic.core.utilities.LocalDateTimeHelper;
1215

1316
/**
@@ -55,6 +58,24 @@ public static <T> T getFrom(OptionalNullable<T> optionalNullable) {
5558
return (optionalNullable == null) ? null : optionalNullable.value;
5659
}
5760

61+
@Override
62+
public int hashCode() {
63+
return Objects.hash(value);
64+
}
65+
66+
@Override
67+
public boolean equals(Object obj) {
68+
if (obj == this) {
69+
return true;
70+
}
71+
72+
if (obj instanceof OptionalNullable<?>) {
73+
return Objects.equals(((OptionalNullable<?>) obj).value, value);
74+
}
75+
76+
return Objects.equals(obj, value);
77+
}
78+
5879
/**
5980
* JsonSerializer for the {@link OptionalNullable} instance. It is used to Serialize an
6081
* {@link OptionalNullable} as its encapsulated object.

src/test/java/apimatic/core/type/OptionalNullableTest.java

Lines changed: 45 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,18 @@
11
package apimatic.core.type;
22

33
import static org.junit.Assert.assertEquals;
4+
import static org.junit.Assert.assertFalse;
5+
import static org.junit.Assert.assertTrue;
6+
47
import java.io.IOException;
58
import java.time.LocalDate;
69
import java.time.LocalDateTime;
710
import java.util.Arrays;
811
import java.util.HashMap;
912
import java.util.List;
1013
import java.util.Map;
14+
import java.util.Objects;
15+
1116
import org.junit.Test;
1217
import apimatic.core.models.Rfc1123Date;
1318
import apimatic.core.models.Rfc1123DateArray;
@@ -21,12 +26,12 @@
2126
import apimatic.core.models.UnixDate;
2227
import apimatic.core.models.UnixDateArray;
2328
import apimatic.core.models.UnixDateMap;
29+
import io.apimatic.core.types.OptionalNullable;
2430
import io.apimatic.core.utilities.CoreHelper;
2531
import io.apimatic.core.utilities.LocalDateTimeHelper;
2632

2733
public class OptionalNullableTest {
2834

29-
3035
/**
3136
* Simple date string.
3237
*/
@@ -91,11 +96,18 @@ public class OptionalNullableTest {
9196
* An instance of {@link LocalDateTime}.
9297
*/
9398
private static final LocalDateTime LOCAL_DATE_TIME = LocalDateTime.of(2021, 1, 20, 12, 12, 41);
94-
9599
/**
96100
* An instance of {@link LocalDate}.
97101
*/
98102
private static final LocalDate LOCAL_DATE = LocalDate.of(2020, 1, 8);
103+
/**
104+
* An instance of a number.
105+
*/
106+
private static final int NUMBER_124 = 124;
107+
/**
108+
* An instance of a number.
109+
*/
110+
private static final int NUMBER_125 = 125;
99111

100112
@Test
101113
public void testSimpleDate() throws IOException {
@@ -257,4 +269,35 @@ public void testRfc8601DateMapToString() throws IOException {
257269
String actual = rfc8601DateMap.toString();
258270
assertEquals(actual, expected);
259271
}
272+
273+
@Test
274+
public void testEquals() throws IOException {
275+
OptionalNullable<String> object1 = OptionalNullable.of("some string");
276+
OptionalNullable<String> object2 = OptionalNullable.of("some string");
277+
OptionalNullable<String> object3 = OptionalNullable.of("some other string");
278+
OptionalNullable<Integer> object4 = OptionalNullable.of(NUMBER_124);
279+
OptionalNullable<Integer> object5 = OptionalNullable.of(null);
280+
281+
assertTrue(object1.equals(object1));
282+
assertTrue(object1.equals(object2));
283+
assertTrue(object1.equals("some string"));
284+
assertTrue(object4.equals(NUMBER_124));
285+
assertTrue(object5.equals(null));
286+
287+
assertFalse(object1.equals(object3));
288+
assertFalse(object1.equals(object4));
289+
assertFalse(object4.equals(NUMBER_125));
290+
assertFalse(object1.equals(null));
291+
}
292+
293+
@Test
294+
public void testHashCode() throws IOException {
295+
OptionalNullable<String> object1 = OptionalNullable.of("some string");
296+
OptionalNullable<String> object2 = OptionalNullable.of("some string");
297+
OptionalNullable<Integer> object3 = OptionalNullable.of(NUMBER_124);
298+
299+
assertEquals(object1.hashCode(), object2.hashCode());
300+
assertEquals(object1.hashCode(), Objects.hash("some string"));
301+
assertEquals(object3.hashCode(), Objects.hash(NUMBER_124));
302+
}
260303
}

0 commit comments

Comments
 (0)