mardi 8 décembre 2015

How to instantiate an interface object?

I have an abstract class and several implementations.

Based on the implementation class, I'd like to execute a method and instantiate the implementation class itself with new constructor.

Of course the following won't work as the class is Abstract, and I cannot change this fact. But how could I pass the "logic" how to create each implementation object to the method prepareList()? Especially regarding design decisions.

abstract class AbstractClass {
    int id;
    String name;
    int age;
    //lots of fields
}

class FirstClass extends AbstractClass {

}

class SecondClass extends AbstractClass {

}


class MyService {
    void execute(Data data) {
        List<FirstClass> list = prepareList(data, FirstClass.class);
        //process list
    }

    List<AbstractClass> prepareList(Data data, Class<? extends AbstractClass> clazz) {
        List<AbstractClass> collection = new ArrayList<>();

        for (Some value in data.getList()) {
            AbstractClass obj = new AbstractClass(); //does of course not work with abstract class
            obj.setId();
            obj.setName();
            obj.setAge();
            collection.add(obj);
        }

        return collection;
    }
}

Aucun commentaire:

Enregistrer un commentaire