Merge pull request #14727 from parthiv39731/PR-6669

BAEL-6669, Passing Class Name as Parameter in Java
This commit is contained in:
davidmartinezbarua 2023-09-13 15:03:07 -03:00 committed by GitHub
commit 8bdab701bf
17 changed files with 305 additions and 0 deletions

View File

@ -0,0 +1,21 @@
package com.baeldung.reflection.createobject.basic;
import java.lang.reflect.InvocationTargetException;
public class BronzeJobCard {
private Object jobType;
public void setJobType(String jobType) throws ClassNotFoundException,
NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {
Class jobTypeClass = Class.forName(jobType);
this.jobType = jobTypeClass.getDeclaredConstructor().newInstance();
}
public String startJob() {
if(this.jobType instanceof RepairJob) {
return "Start Bronze " + ((RepairJob) this.jobType).getJobType();
}
if(this.jobType instanceof MaintenanceJob) {
return "Start Bronze " + ((MaintenanceJob) this.jobType).getJobType();
}
return "Bronze Job Failed";
}
}

View File

@ -0,0 +1,17 @@
package com.baeldung.reflection.createobject.basic;
import java.lang.reflect.InvocationTargetException;
public class GoldJobCard<T> {
private T jobType;
public void setJobType(Class<T> jobTypeClass) throws
NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {
this.jobType = jobTypeClass.getDeclaredConstructor().newInstance();
}
public String startJob() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
return "Start Gold " + this.jobType.getClass().getMethod("getJobType")
.invoke(this.jobType).toString();
}
}

View File

@ -0,0 +1,7 @@
package com.baeldung.reflection.createobject.basic;
public class MaintenanceJob {
public String getJobType() {
return "Maintenance Job";
}
}

View File

@ -0,0 +1,7 @@
package com.baeldung.reflection.createobject.basic;
public class PaintJob {
public String getJobType() {
return "Paint Job";
}
}

View File

@ -0,0 +1,7 @@
package com.baeldung.reflection.createobject.basic;
public class RepairJob {
public String getJobType() {
return "Repair Job";
}
}

View File

@ -0,0 +1,22 @@
package com.baeldung.reflection.createobject.basic;
import java.lang.reflect.InvocationTargetException;
public class SilverJobCard {
private Object jobType;
public void setJobType(Class jobTypeClass) throws
NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {
this.jobType = jobTypeClass.getDeclaredConstructor().newInstance();
}
public String startJob() {
if (this.jobType instanceof RepairJob) {
return "Start Silver " + ((RepairJob) this.jobType).getJobType();
}
if (this.jobType instanceof MaintenanceJob) {
return "Start Silver " + ((MaintenanceJob) this.jobType).getJobType();
}
return "Silver Job Failed";
}
}

View File

@ -0,0 +1,5 @@
package com.baeldung.reflection.createobject.special;
public interface Job {
String getJobType();
}

View File

@ -0,0 +1,7 @@
package com.baeldung.reflection.createobject.special;
public class MaintenanceJob implements Job {
public String getJobType() {
return "Maintenance Job";
}
}

View File

@ -0,0 +1,8 @@
package com.baeldung.reflection.createobject.special;
public class PaintJob implements Job {
@Override
public String getJobType() {
return "Paint Job";
}
}

View File

@ -0,0 +1,16 @@
package com.baeldung.reflection.createobject.special;
import java.lang.reflect.InvocationTargetException;
public class PlatinumJobCard<T extends Job> {
private T jobType;
public void setJobType(Class<T> jobTypeClass) throws
NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {
this.jobType = jobTypeClass.getDeclaredConstructor().newInstance();
}
public String startJob() {
return "Start Platinum " + this.jobType.getJobType();
}
}

View File

@ -0,0 +1,7 @@
package com.baeldung.reflection.createobject.special;
public class RepairJob implements Job {
public String getJobType() {
return "Repair Job";
}
}

View File

@ -0,0 +1,20 @@
@startuml
'https://plantuml.com/class-diagram
class BronzeJobCard {
-Object jobType
+setJobType(String jobType)
+startJob()
}
class MaintenanceJob {
+getJobType()
}
class RepairJob {
+getJobType()
}
BronzeJobCard -left-> MaintenanceJob:creates
BronzeJobCard -right-> RepairJob:creates
@enduml

View File

@ -0,0 +1,20 @@
@startuml
'https://plantuml.com/class-diagram
class GoldJobCard<T> {
-T jobType
+setJobType(Class<T> jobTypeClass)
+startJob()
}
class MaintenanceJob {
+getJobType()
}
class RepairJob {
+getJobType()
}
GoldJobCard -left-> MaintenanceJob:creates
GoldJobCard -right-> RepairJob:creates
@enduml

View File

@ -0,0 +1,25 @@
@startuml
'https://plantuml.com/class-diagram
interface Job {
+getJobType
}
class PlatinumJobCard <T extends Job> {
+setJobType(Class<T> jobTypeClass)
+startJob()
}
class MaintenanceJob implements Job {
+getJobType()
}
class RepairJob implements Job {
+getJobType()
}
class PaintJob implements Job {
+getJobType()
}
PlatinumJobCard -up-> MaintenanceJob:creates
PlatinumJobCard -up-> RepairJob:creates
PlatinumJobCard -up-> PaintJob:creates
@enduml

View File

@ -0,0 +1,20 @@
@startuml
'https://plantuml.com/class-diagram
class SilverJobCard {
-Object jobType
+setJobType(Class jobTypeClass);
+startJob();
}
class MaintenanceJob {
+getJobType();
}
class RepairJob {
+getJobType();
}
SilverJobCard -left-> MaintenanceJob:creates
SilverJobCard -right-> RepairJob:creates
@enduml

View File

@ -0,0 +1,67 @@
package com.baeldung.reflection.createobject;
import com.baeldung.reflection.createobject.basic.*;
import org.junit.jupiter.api.Test;
import java.lang.reflect.InvocationTargetException;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class CreateObjectBasicUnitTest {
@Test
public void givenBronzeJobCard_whenJobTypeRepairAndMaintenance_thenStartJob() throws ClassNotFoundException,
InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException {
BronzeJobCard bronzeJobCard1 = new BronzeJobCard();
bronzeJobCard1.setJobType("com.baeldung.reflection.createobject.basic.RepairJob");
assertEquals("Start Bronze Repair Job", bronzeJobCard1.startJob());
BronzeJobCard bronzeJobCard2 = new BronzeJobCard();
bronzeJobCard2.setJobType("com.baeldung.reflection.createobject.basic.MaintenanceJob");
assertEquals("Start Bronze Maintenance Job", bronzeJobCard2.startJob());
}
@Test
public void givenBronzeJobCard_whenJobTypePaint_thenFailJob() throws ClassNotFoundException,
InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException {
BronzeJobCard bronzeJobCard = new BronzeJobCard();
bronzeJobCard.setJobType("com.baeldung.reflection.createobject.basic.PaintJob");
assertEquals("Bronze Job Failed", bronzeJobCard.startJob());
}
@Test
public void givenSilverJobCard_whenJobTypeRepairAndMaintenance_thenStartJob() throws InvocationTargetException,
NoSuchMethodException, InstantiationException, IllegalAccessException {
SilverJobCard silverJobCard1 = new SilverJobCard();
silverJobCard1.setJobType(RepairJob.class);
assertEquals("Start Silver Repair Job", silverJobCard1.startJob());
SilverJobCard silverJobCard2 = new SilverJobCard();
silverJobCard2.setJobType(MaintenanceJob.class);
assertEquals("Start Silver Maintenance Job", silverJobCard2.startJob());
}
@Test
public void givenSilverJobCard_whenJobTypePaint_thenFailJob() throws ClassNotFoundException,
InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException {
SilverJobCard silverJobCard = new SilverJobCard();
silverJobCard.setJobType(PaintJob.class);
assertEquals("Silver Job Failed", silverJobCard.startJob());
}
@Test
public void givenGoldJobCard_whenJobTypeRepairMaintenanceAndPaint_thenStartJob() throws InvocationTargetException,
NoSuchMethodException, InstantiationException, IllegalAccessException {
GoldJobCard<RepairJob> goldJobCard1 = new GoldJobCard<RepairJob>();
goldJobCard1.setJobType(RepairJob.class);
assertEquals("Start Gold Repair Job", goldJobCard1.startJob());
GoldJobCard<MaintenanceJob> goldJobCard2 = new GoldJobCard<MaintenanceJob>();
goldJobCard2.setJobType(MaintenanceJob.class);
assertEquals("Start Gold Maintenance Job", goldJobCard2.startJob());
GoldJobCard<PaintJob> goldJobCard3 = new GoldJobCard<PaintJob>();
goldJobCard3.setJobType(PaintJob.class);
assertEquals("Start Gold Paint Job", goldJobCard3.startJob());
}
}

View File

@ -0,0 +1,29 @@
package com.baeldung.reflection.createobject;
import com.baeldung.reflection.createobject.special.MaintenanceJob;
import com.baeldung.reflection.createobject.special.PaintJob;
import com.baeldung.reflection.createobject.special.PlatinumJobCard;
import com.baeldung.reflection.createobject.special.RepairJob;
import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.Test;
import java.lang.reflect.InvocationTargetException;
public class CreateObjectSpecialUnitTest {
@Test
public void givenPlatinumJobCard_whenJobTypeRepairMaintenanceAndPaint_thenStartJob() throws InvocationTargetException,
NoSuchMethodException, InstantiationException, IllegalAccessException {
PlatinumJobCard<RepairJob> platinumJobCard1 = new PlatinumJobCard<RepairJob>();
platinumJobCard1.setJobType(RepairJob.class);
assertEquals("Start Platinum Repair Job", platinumJobCard1.startJob());
PlatinumJobCard<MaintenanceJob> platinumJobCard2 = new PlatinumJobCard<MaintenanceJob>();
platinumJobCard2.setJobType(MaintenanceJob.class);
assertEquals("Start Platinum Maintenance Job", platinumJobCard2.startJob());
PlatinumJobCard<PaintJob> platinumJobCard3 = new PlatinumJobCard<PaintJob>();
platinumJobCard3.setJobType(PaintJob.class);
assertEquals("Start Platinum Paint Job", platinumJobCard3.startJob());
}
}