BAEL-2388: moved examples java-collections-maps -> core-java-long. Fixing String comparisons
This commit is contained in:
parent
456f4b0f5a
commit
a67c10eec7
@ -66,6 +66,12 @@
|
|||||||
<artifactId>mail</artifactId>
|
<artifactId>mail</artifactId>
|
||||||
<version>${javax.mail.version}</version>
|
<version>${javax.mail.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>nl.jqno.equalsverifier</groupId>
|
||||||
|
<artifactId>equalsverifier</artifactId>
|
||||||
|
<version>${equalsverifier.version}</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
@ -424,6 +430,7 @@
|
|||||||
<maven-shade-plugin.version>3.1.1</maven-shade-plugin.version>
|
<maven-shade-plugin.version>3.1.1</maven-shade-plugin.version>
|
||||||
<spring-boot-maven-plugin.version>2.0.3.RELEASE</spring-boot-maven-plugin.version>
|
<spring-boot-maven-plugin.version>2.0.3.RELEASE</spring-boot-maven-plugin.version>
|
||||||
<exec-maven-plugin.version>1.6.0</exec-maven-plugin.version>
|
<exec-maven-plugin.version>1.6.0</exec-maven-plugin.version>
|
||||||
|
<equalsverifier.version>3.0.3</equalsverifier.version>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
</project>
|
</project>
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
package com.baeldung.map.hashcode;
|
package com.baeldung.equalshashcode;
|
||||||
|
|
||||||
class Money {
|
class Money {
|
||||||
|
|
||||||
@ -17,15 +17,19 @@ class Money {
|
|||||||
if (!(o instanceof Money))
|
if (!(o instanceof Money))
|
||||||
return false;
|
return false;
|
||||||
Money other = (Money)o;
|
Money other = (Money)o;
|
||||||
|
boolean currencyCodeEquals = (this.currencyCode == null && other.currencyCode == null)
|
||||||
|
|| (this.currencyCode != null && this.currencyCode.equals(other.currencyCode));
|
||||||
return this.amount == other.amount
|
return this.amount == other.amount
|
||||||
&& this.currencyCode == other.currencyCode;
|
&& currencyCodeEquals;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int hashCode() {
|
public int hashCode() {
|
||||||
int result = 17;
|
int result = 17;
|
||||||
result = 31 * result + amount;
|
result = 31 * result + amount;
|
||||||
|
if (currencyCode != null) {
|
||||||
result = 31 * result + currencyCode.hashCode();
|
result = 31 * result + currencyCode.hashCode();
|
||||||
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
@ -1,4 +1,4 @@
|
|||||||
package com.baeldung.map.hashcode;
|
package com.baeldung.equalshashcode;
|
||||||
|
|
||||||
class Team {
|
class Team {
|
||||||
|
|
@ -0,0 +1,38 @@
|
|||||||
|
package com.baeldung.equalshashcode;
|
||||||
|
|
||||||
|
class Voucher {
|
||||||
|
|
||||||
|
private Money value;
|
||||||
|
private String store;
|
||||||
|
|
||||||
|
Voucher(int amount, String currencyCode, String store) {
|
||||||
|
this.value = new Money(amount, currencyCode);
|
||||||
|
this.store = store;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object o) {
|
||||||
|
if (o == this)
|
||||||
|
return true;
|
||||||
|
if (!(o instanceof Voucher))
|
||||||
|
return false;
|
||||||
|
Voucher other = (Voucher)o;
|
||||||
|
boolean valueEquals = (this.value == null && other.value == null)
|
||||||
|
|| (this.value != null && this.value.equals(other.value));
|
||||||
|
boolean storeEquals = (this.store == null && other.store == null)
|
||||||
|
|| (this.store != null && this.store.equals(other.store));
|
||||||
|
return valueEquals && storeEquals;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
int result = 17;
|
||||||
|
if (this.value != null) {
|
||||||
|
result = 31 * result + value.hashCode();
|
||||||
|
}
|
||||||
|
if (this.store != null) {
|
||||||
|
result = 31 * result + store.hashCode();
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
@ -1,5 +1,11 @@
|
|||||||
package com.baeldung.map.hashcode;
|
package com.baeldung.equalshashcode;
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* This class overrides equals, but it doesn't override hashCode.
|
||||||
|
*
|
||||||
|
* To see which problems this leads to:
|
||||||
|
* TeamUnitTest.givenMapKeyWithoutHashCode_whenSearched_thenReturnsWrongValue
|
||||||
|
*/
|
||||||
class WrongTeam {
|
class WrongTeam {
|
||||||
|
|
||||||
String city;
|
String city;
|
@ -0,0 +1,47 @@
|
|||||||
|
package com.baeldung.equalshashcode;
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* This class extends the Money class that has overridden the equals method and once again overrides the equals method.
|
||||||
|
*
|
||||||
|
* To see which problems this leads to:
|
||||||
|
* MoneyUnitTest.givenMoneyAndVoucherInstances_whenEquals_thenReturnValuesArentSymmetric
|
||||||
|
*/
|
||||||
|
class WrongVoucher extends Money {
|
||||||
|
|
||||||
|
private String store;
|
||||||
|
|
||||||
|
WrongVoucher(int amount, String currencyCode, String store) {
|
||||||
|
super(amount, currencyCode);
|
||||||
|
|
||||||
|
this.store = store;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object o) {
|
||||||
|
if (o == this)
|
||||||
|
return true;
|
||||||
|
if (!(o instanceof WrongVoucher))
|
||||||
|
return false;
|
||||||
|
WrongVoucher other = (WrongVoucher)o;
|
||||||
|
boolean currencyCodeEquals = (this.currencyCode == null && other.currencyCode == null)
|
||||||
|
|| (this.currencyCode != null && this.currencyCode.equals(other.currencyCode));
|
||||||
|
boolean storeEquals = (this.store == null && other.store == null)
|
||||||
|
|| (this.store != null && this.store.equals(other.store));
|
||||||
|
return this.amount == other.amount
|
||||||
|
&& currencyCodeEquals
|
||||||
|
&& storeEquals;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
int result = 17;
|
||||||
|
result = 31 * result + amount;
|
||||||
|
if (this.currencyCode != null) {
|
||||||
|
result = 31 * result + currencyCode.hashCode();
|
||||||
|
}
|
||||||
|
if (this.store != null) {
|
||||||
|
result = 31 * result + store.hashCode();
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
@ -1,4 +1,4 @@
|
|||||||
package com.baeldung.map.hashcode;
|
package com.baeldung.equalshashcode;
|
||||||
|
|
||||||
import static org.junit.Assert.assertTrue;
|
import static org.junit.Assert.assertTrue;
|
||||||
import static org.junit.Assert.assertFalse;
|
import static org.junit.Assert.assertFalse;
|
@ -1,4 +1,4 @@
|
|||||||
package com.baeldung.map.hashcode;
|
package com.baeldung.equalshashcode;
|
||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
import static org.junit.Assert.assertFalse;
|
import static org.junit.Assert.assertFalse;
|
@ -41,12 +41,6 @@
|
|||||||
<artifactId>streamex</artifactId>
|
<artifactId>streamex</artifactId>
|
||||||
<version>0.6.5</version>
|
<version>0.6.5</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
|
||||||
<groupId>nl.jqno.equalsverifier</groupId>
|
|
||||||
<artifactId>equalsverifier</artifactId>
|
|
||||||
<version>3.0.3</version>
|
|
||||||
<scope>test</scope>
|
|
||||||
</dependency>
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
|
@ -1,31 +0,0 @@
|
|||||||
package com.baeldung.map.hashcode;
|
|
||||||
|
|
||||||
class Voucher {
|
|
||||||
|
|
||||||
private Money value;
|
|
||||||
private String store;
|
|
||||||
|
|
||||||
Voucher(int amount, String currencyCode, String store) {
|
|
||||||
this.value = new Money(amount, currencyCode);
|
|
||||||
this.store = store;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean equals(Object o) {
|
|
||||||
if (o == this)
|
|
||||||
return true;
|
|
||||||
if (!(o instanceof Voucher))
|
|
||||||
return false;
|
|
||||||
Voucher other = (Voucher)o;
|
|
||||||
return this.value == other.value
|
|
||||||
&& this.store == other.store;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int hashCode() {
|
|
||||||
int result = 17;
|
|
||||||
result = 31 * result + value.hashCode();
|
|
||||||
result = 31 * result + store.hashCode();
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,33 +0,0 @@
|
|||||||
package com.baeldung.map.hashcode;
|
|
||||||
|
|
||||||
class WrongVoucher extends Money {
|
|
||||||
|
|
||||||
private String store;
|
|
||||||
|
|
||||||
WrongVoucher(int amount, String currencyCode, String store) {
|
|
||||||
super(amount, currencyCode);
|
|
||||||
|
|
||||||
this.store = store;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean equals(Object o) {
|
|
||||||
if (o == this)
|
|
||||||
return true;
|
|
||||||
if (!(o instanceof WrongVoucher))
|
|
||||||
return false;
|
|
||||||
WrongVoucher other = (WrongVoucher)o;
|
|
||||||
return this.amount == other.amount
|
|
||||||
&& this.currencyCode == other.currencyCode
|
|
||||||
&& this.store == other.store;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int hashCode() {
|
|
||||||
int result = 17;
|
|
||||||
result = 31 * result + amount;
|
|
||||||
result = 31 * result + currencyCode.hashCode();
|
|
||||||
result = 31 * result + store.hashCode();
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1 +0,0 @@
|
|||||||
Non-nullity: hashCode throws NullPointerException on field city.
|
|
Loading…
x
Reference in New Issue
Block a user