Create different request objects dynamically



Is it possible to create different objects dynamically from a superset object. For example:

SuperSet Object:

class Z { // some attributes }

class A {
      String a, m, f, c;
      int x,y,z;
      Z z;
}

Child Objects required to be created dynamically from A:

class B {
      String b; // mapped with value of a of A
      String d; // mapped with value of m of A
      int a; // mapped with value of x of A
      int b; // mapped with value of y of A
}

class C {
      String y; // mapped with value of f of A
      String z; // mapped with value of c of A
      int z; // mapped with value of z of A
      Z b; // mapped with value of z of A
}

I would like to create such different child classes having different members which are subset of parent class A.

I know the normal way of creating skeleton class for each child object wanted and then map with values from superset object. Instead is there a way to map different parent class member values to child objects members dynamically.

Answer

I am assuming the correspondence stated above is fixed. I mean, field b of Class B will always take the value of A. You can achieve this with a constructor designed accordingly. The code follows,

class B {
    String b; // mapped with value of a of A
    String d; // mapped with value of m of A
    int a; // mapped with value of x of A
    int b; // mapped with value of y of A
    
    public B (A a) {
        this.b = A.a // A.getA() alternatively 
        this.d = A.m // A.getM() alternatively 
        this.a = A.x // A.getX() alternatively 
        this.b = A.y // A.getY() alternatively 
    }
  
}

Now, what happens above is that in the constructor of B you provide A and map the intended values of A onto the intended fields of B. Note, this can be done regardless of the fact that B is or is not a child of A. So, assuming you need to have B as a child of A you can do as follows:

class B extends A{
    String b; // mapped with value of a of A
    String d; // mapped with value of m of A
    int a; // mapped with value of x of A
    int b; // mapped with value of y of A
    
    public B (A a) {
        this.b = A.a // A.getA() alternatively 
        this.d = A.m // A.getM() alternatively 
        this.a = A.x // A.getX() alternatively 
        this.b = A.y // A.getY() alternatively 
    }
  
}

Cheers,

D



Source: stackoverflow