Merge pull request #14727 from parthiv39731/PR-6669
BAEL-6669, Passing Class Name as Parameter in Java
This commit is contained in:
commit
8bdab701bf
|
@ -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";
|
||||
}
|
||||
}
|
|
@ -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();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
package com.baeldung.reflection.createobject.basic;
|
||||
|
||||
public class MaintenanceJob {
|
||||
public String getJobType() {
|
||||
return "Maintenance Job";
|
||||
}
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
package com.baeldung.reflection.createobject.basic;
|
||||
|
||||
public class PaintJob {
|
||||
public String getJobType() {
|
||||
return "Paint Job";
|
||||
}
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
package com.baeldung.reflection.createobject.basic;
|
||||
|
||||
public class RepairJob {
|
||||
public String getJobType() {
|
||||
return "Repair Job";
|
||||
}
|
||||
}
|
|
@ -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";
|
||||
}
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
package com.baeldung.reflection.createobject.special;
|
||||
|
||||
public interface Job {
|
||||
String getJobType();
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
package com.baeldung.reflection.createobject.special;
|
||||
|
||||
public class MaintenanceJob implements Job {
|
||||
public String getJobType() {
|
||||
return "Maintenance Job";
|
||||
}
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
package com.baeldung.reflection.createobject.special;
|
||||
|
||||
public class PaintJob implements Job {
|
||||
@Override
|
||||
public String getJobType() {
|
||||
return "Paint Job";
|
||||
}
|
||||
}
|
|
@ -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();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
package com.baeldung.reflection.createobject.special;
|
||||
|
||||
public class RepairJob implements Job {
|
||||
public String getJobType() {
|
||||
return "Repair Job";
|
||||
}
|
||||
}
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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());
|
||||
}
|
||||
}
|
|
@ -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());
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue