BAEL-1706 - optional parameters in java (#4050)
* BAEL-1706 - optional parameters in java * minor adjustments per review * add tests * fix formatting * fix constructor issue with MultiVitaminOverloading * BAEL-1706 Test name change, formatting
This commit is contained in:
parent
80f8fee3c2
commit
57a4f160aa
@ -0,0 +1,50 @@
|
|||||||
|
package com.baeldung.optionalparams;
|
||||||
|
|
||||||
|
public class MultiVitamin {
|
||||||
|
|
||||||
|
private String name; // required
|
||||||
|
private int vitaminA; // in mcg
|
||||||
|
private int vitaminC; // in mg
|
||||||
|
private int calcium; // in mg
|
||||||
|
private int iron; // in mg
|
||||||
|
|
||||||
|
public MultiVitamin(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getVitaminA() {
|
||||||
|
return vitaminA;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setVitaminA(int vitaminA) {
|
||||||
|
this.vitaminA = vitaminA;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getVitaminC() {
|
||||||
|
return vitaminC;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setVitaminC(int vitaminC) {
|
||||||
|
this.vitaminC = vitaminC;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getCalcium() {
|
||||||
|
return calcium;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCalcium(int calcium) {
|
||||||
|
this.calcium = calcium;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getIron() {
|
||||||
|
return iron;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setIron(int iron) {
|
||||||
|
this.iron = iron;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,38 @@
|
|||||||
|
package com.baeldung.optionalparams;
|
||||||
|
|
||||||
|
public class MultiVitaminAllowingNulls {
|
||||||
|
|
||||||
|
private String name; // required
|
||||||
|
private Integer vitaminA; // in mcg
|
||||||
|
private Integer vitaminC; // in mg
|
||||||
|
private Integer calcium; // in mg
|
||||||
|
private Integer iron; // in mg
|
||||||
|
|
||||||
|
public MultiVitaminAllowingNulls(String name, Integer vitaminA, Integer vitaminC, Integer calcium, Integer iron) {
|
||||||
|
this.name = name;
|
||||||
|
this.vitaminA = vitaminA;
|
||||||
|
this.vitaminC = vitaminC;
|
||||||
|
this.calcium = calcium;
|
||||||
|
this.iron = iron;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getVitaminA() {
|
||||||
|
return vitaminA;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getVitaminC() {
|
||||||
|
return vitaminC;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getCalcium() {
|
||||||
|
return calcium;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getIron() {
|
||||||
|
return iron;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,56 @@
|
|||||||
|
package com.baeldung.optionalparams;
|
||||||
|
|
||||||
|
public class MultiVitaminOverloading {
|
||||||
|
|
||||||
|
static final int DEFAULT_IRON_AMOUNT = 20;
|
||||||
|
|
||||||
|
private final String name; // required
|
||||||
|
private final int vitaminA; // in mcg
|
||||||
|
private final int vitaminC; // in mg
|
||||||
|
private final int calcium; // in mg
|
||||||
|
private final int iron; // in mg
|
||||||
|
|
||||||
|
public MultiVitaminOverloading(String name) {
|
||||||
|
this(name, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public MultiVitaminOverloading(String name, int vitaminA) {
|
||||||
|
this(name, vitaminA, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public MultiVitaminOverloading(String name, int vitaminA, int vitaminC) {
|
||||||
|
this(name, vitaminA, vitaminC, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public MultiVitaminOverloading(String name, int vitaminA, int vitaminC, int calcium) {
|
||||||
|
this(name, vitaminA, vitaminC, calcium, DEFAULT_IRON_AMOUNT);
|
||||||
|
}
|
||||||
|
|
||||||
|
public MultiVitaminOverloading(String name, int vitaminA, int vitaminC, int calcium, int iron) {
|
||||||
|
this.name = name;
|
||||||
|
this.vitaminA = vitaminA;
|
||||||
|
this.vitaminC = vitaminC;
|
||||||
|
this.calcium = calcium;
|
||||||
|
this.iron = iron;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getVitaminA() {
|
||||||
|
return vitaminA;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getVitaminC() {
|
||||||
|
return vitaminC;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getCalcium() {
|
||||||
|
return calcium;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getIron() {
|
||||||
|
return iron;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,52 @@
|
|||||||
|
package com.baeldung.optionalparams;
|
||||||
|
|
||||||
|
public class MultiVitaminStaticFactoryMethods {
|
||||||
|
|
||||||
|
static final int IRON_AMT_DEF = 20;
|
||||||
|
static final int IRON_AMT_MEN = 30;
|
||||||
|
|
||||||
|
static final int CALCIUM_AMT_DEF = 100;
|
||||||
|
static final int CALCIUM_AMT_WOMEN = 120;
|
||||||
|
|
||||||
|
private final String name; // required
|
||||||
|
private final int vitaminA; // in mcg
|
||||||
|
private final int vitaminC; // in mg
|
||||||
|
private final int calcium; // in mg
|
||||||
|
private final int iron; // in mg
|
||||||
|
|
||||||
|
public static MultiVitaminStaticFactoryMethods forMen(String name) {
|
||||||
|
return new MultiVitaminStaticFactoryMethods(name, 5000, 60, CALCIUM_AMT_DEF, IRON_AMT_MEN);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static MultiVitaminStaticFactoryMethods forWomen(String name) {
|
||||||
|
return new MultiVitaminStaticFactoryMethods(name, 5000, 60, CALCIUM_AMT_WOMEN, IRON_AMT_DEF);
|
||||||
|
}
|
||||||
|
|
||||||
|
private MultiVitaminStaticFactoryMethods(String name, int vitaminA, int vitaminC, int calcium, int iron) {
|
||||||
|
this.name = name;
|
||||||
|
this.vitaminA = vitaminA;
|
||||||
|
this.vitaminC = vitaminC;
|
||||||
|
this.calcium = calcium;
|
||||||
|
this.iron = iron;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getVitaminA() {
|
||||||
|
return vitaminA;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getVitaminC() {
|
||||||
|
return vitaminC;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getCalcium() {
|
||||||
|
return calcium;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getIron() {
|
||||||
|
return iron;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,77 @@
|
|||||||
|
package com.baeldung.optionalparams;
|
||||||
|
|
||||||
|
public class MultiVitaminWithBuilder {
|
||||||
|
|
||||||
|
private final String name; // required
|
||||||
|
private final int vitaminA; // in mcg
|
||||||
|
private final int vitaminC; // in mg
|
||||||
|
private final int calcium; // in mg
|
||||||
|
private final int iron; // in mg
|
||||||
|
|
||||||
|
private MultiVitaminWithBuilder(MultiVitaminBuilder builder) {
|
||||||
|
this.name = builder.name;
|
||||||
|
this.vitaminA = builder.vitaminA;
|
||||||
|
this.vitaminC = builder.vitaminC;
|
||||||
|
this.calcium = builder.calcium;
|
||||||
|
this.iron = builder.iron;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getVitaminA() {
|
||||||
|
return vitaminA;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getVitaminC() {
|
||||||
|
return vitaminC;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getCalcium() {
|
||||||
|
return calcium;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getIron() {
|
||||||
|
return iron;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class MultiVitaminBuilder {
|
||||||
|
|
||||||
|
private static final int ZERO = 0;
|
||||||
|
|
||||||
|
private final String name; // required
|
||||||
|
private int vitaminA = ZERO;
|
||||||
|
private int vitaminC = ZERO;
|
||||||
|
private int calcium = ZERO;
|
||||||
|
private int iron = ZERO;
|
||||||
|
|
||||||
|
public MultiVitaminBuilder(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public MultiVitaminBuilder withVitaminA(int vitaminA) {
|
||||||
|
this.vitaminA = vitaminA;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public MultiVitaminBuilder withVitaminC(int vitaminC) {
|
||||||
|
this.vitaminC = vitaminC;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public MultiVitaminBuilder withCalcium(int calcium) {
|
||||||
|
this.calcium = calcium;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public MultiVitaminBuilder withIron(int iron) {
|
||||||
|
this.iron = iron;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public MultiVitaminWithBuilder build() {
|
||||||
|
return new MultiVitaminWithBuilder(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,96 @@
|
|||||||
|
package com.baeldung.optionalparams;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
|
||||||
|
import org.assertj.core.util.Arrays;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
public class OptionalParamsUnitTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenCreateMultiVitaminWithOverloading_thenOk() {
|
||||||
|
MultiVitaminOverloading multiVitamin = new MultiVitaminOverloading("Default Multivitamin");
|
||||||
|
|
||||||
|
assertThat(multiVitamin.getName()).isEqualTo("Default Multivitamin");
|
||||||
|
assertThat(multiVitamin.getVitaminA()).isEqualTo(0);
|
||||||
|
assertThat(multiVitamin.getVitaminC()).isEqualTo(0);
|
||||||
|
assertThat(multiVitamin.getCalcium()).isEqualTo(0);
|
||||||
|
assertThat(multiVitamin.getIron()).isEqualTo(MultiVitaminOverloading.DEFAULT_IRON_AMOUNT);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenCreateMultiVitaminWithStaticFactoryMethods_thenOk() {
|
||||||
|
MultiVitaminStaticFactoryMethods mensMultiVitamin = MultiVitaminStaticFactoryMethods.forMen("Complete for Men");
|
||||||
|
|
||||||
|
assertThat(mensMultiVitamin.getName()).isEqualTo("Complete for Men");
|
||||||
|
assertThat(mensMultiVitamin.getCalcium()).isEqualTo(MultiVitaminStaticFactoryMethods.CALCIUM_AMT_DEF);
|
||||||
|
assertThat(mensMultiVitamin.getIron()).isEqualTo(MultiVitaminStaticFactoryMethods.IRON_AMT_MEN);
|
||||||
|
|
||||||
|
MultiVitaminStaticFactoryMethods womensMultiVitamin = MultiVitaminStaticFactoryMethods.forWomen("Complete for Women");
|
||||||
|
|
||||||
|
assertThat(womensMultiVitamin.getName()).isEqualTo("Complete for Women");
|
||||||
|
assertThat(womensMultiVitamin.getCalcium()).isEqualTo(MultiVitaminStaticFactoryMethods.CALCIUM_AMT_WOMEN);
|
||||||
|
assertThat(womensMultiVitamin.getIron()).isEqualTo(MultiVitaminStaticFactoryMethods.IRON_AMT_DEF);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenCreateMultiVitaminWithBuilder_thenOk() {
|
||||||
|
MultiVitaminWithBuilder vitamin = new MultiVitaminWithBuilder.MultiVitaminBuilder("Maximum Strength")
|
||||||
|
.withCalcium(100)
|
||||||
|
.withIron(200)
|
||||||
|
.withVitaminA(50)
|
||||||
|
.withVitaminC(1000)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
assertThat(vitamin.getName()).isEqualTo("Maximum Strength");
|
||||||
|
assertThat(vitamin.getCalcium()).isEqualTo(100);
|
||||||
|
assertThat(vitamin.getIron()).isEqualTo(200);
|
||||||
|
assertThat(vitamin.getVitaminA()).isEqualTo(50);
|
||||||
|
assertThat(vitamin.getVitaminC()).isEqualTo(1000);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenCreateMutliVitaminWithAccessors_thenOk() {
|
||||||
|
MultiVitamin vitamin = new MultiVitamin("Generic");
|
||||||
|
vitamin.setVitaminA(50);
|
||||||
|
vitamin.setVitaminC(1000);
|
||||||
|
vitamin.setCalcium(100);
|
||||||
|
vitamin.setIron(200);
|
||||||
|
|
||||||
|
assertThat(vitamin.getName()).isEqualTo("Generic");
|
||||||
|
assertThat(vitamin.getCalcium()).isEqualTo(100);
|
||||||
|
assertThat(vitamin.getIron()).isEqualTo(200);
|
||||||
|
assertThat(vitamin.getVitaminA()).isEqualTo(50);
|
||||||
|
assertThat(vitamin.getVitaminC()).isEqualTo(1000);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenCreateMultiVitaminWithNulls_thenOk() {
|
||||||
|
MultiVitamin vitamin = new MultiVitamin(null);
|
||||||
|
|
||||||
|
assertThat(vitamin.getName()).isNull();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void varArgsDemo() {
|
||||||
|
Object[] args = Arrays.array(Long.valueOf(1), Integer.valueOf(2), BigDecimal.valueOf(3));
|
||||||
|
|
||||||
|
processVarArgsWithCastingAntiPattern(args);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void processVarArgsWithCastingAntiPattern(Object... args) {
|
||||||
|
String message = "processing %s as %s";
|
||||||
|
|
||||||
|
// never do this sort of thing
|
||||||
|
for (Object arg : args) {
|
||||||
|
if (arg instanceof Long) {
|
||||||
|
System.out.println(String.format(message, arg, "Long"));
|
||||||
|
} else if (arg instanceof Integer) {
|
||||||
|
System.out.println(String.format(message, arg, "Integer"));
|
||||||
|
} else if (arg instanceof BigDecimal) {
|
||||||
|
System.out.println(String.format(message, arg, "BigDecimal"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user