Sivakumar M
Sivakumar M

Reputation: 1595

How to get Child class?

I want to create an object of child class

more than 100 class extend MasterClass

MasterClass is

 public class MasterClass{
  int key;
  String value;
  String displayValue;
  boolean status;
 } 
 public class User extends MasterClass{
 public User(){ }
 }
 public class Customer extends MasterClass{
 String productName;
 public Customer (){ }
 }

etc...

i will get a MasterClass object from client, i wanted to type cast that object to respective one

if(masterClass instanceof User) {  
  User a_user = (User) a_ masterClass;
  …
} else if(masterClass instanceof Customer) {
  Customer a_customer = (Customer) a_ masterClass;
  …
}

if i do this i will end up with 100s of else if.

Please let me know how i can achieve this without else if?

Thanks in advance.

Upvotes: 1

Views: 999

Answers (3)

Domi
Domi

Reputation: 24528

Use polymorphism and generics, as Java intended.

Polymorphism lets you call a method on your object that behaves differently for every type. The easiest way to achieve this is to provide an abstract method in the base class MasterClass and then override it with different functionality in every extended class. You are probably looking for something like this:

class MasterClass {
    int age;
    // ...
    public abstract void doWork();
    public int getAge() { return age; }
    // .. more methods
}

class User extends MasterClass {
    // customize User here
    @Override
    public void doWork() {  /* User does work in some way */ }
}

class Customer extends MasterClass {
    // customize Customer here
    @Override
    public void doWork() {  /* Customer does work in some other way */ }
}

// ...

If you are not too familiar with OOP, here is a good introductory tutorial.

If you are not allowed to alter your classes, you can populate a look-up table like HashMap<Class, MyFunctor> where you can assign a different functor for every type of person you have.

Also, you might want to use generics. Generics allow you to capture and restrict the type of objects passed to your methods.

Upvotes: 3

AurA
AurA

Reputation: 12363

Using basic concepts of Design Pattern you can create a constructor like this in the object where you try to initialize

MasterClass masterClass;

public MyCreatorOject(MasterClass masterClass)
{
    this.masterClass = masterClass;
}

later when you create the object it can be

new MyCreatorObject(new User());

or

new MyCreatorObject(new Customer());

Upvotes: 0

user1186155
user1186155

Reputation: 248

Maybe you can use generics with the constraint T extends MasterClass?

Upvotes: 1

Related Questions