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