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; | ||||||
|         result = 31 * result + currencyCode.hashCode(); |         if (currencyCode != null) { | ||||||
|  |             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