These two classes are part of a networking layer module that I am building:

    public abstract class BaseRequest {
	
	    protected RequestCreator mCreator;

	    public BaseRequest() {
		    setupRequestCreator();
	    }

	    private setupRequestCreator() {
		    mCreator = new RequestCreator.Builder()
			    .headers(getHeaders())
			    .parser(getParser())
			    .build();
	    }

	    public abstract Headers getHeaders();
	    public abstract Parser getParser();
    }

    public class UserRequest extends BaseRequest {
	
	    private Headers mHeaders;
	    private Request<User> mRequest;

	    private interface UserService {
	    	@GET("/users/{id}")
	    	User getUser(String id);
	    }

	    public UserRequest(Headers headers) {
		    mHeaders = headers;
		    mRequest = mCreator.createRequest(UserService.class);
	    }

	    @Override
	    public Headers getHeaders() {
		    return mHeaders;
	    }

	    @Override
	    public Parser getParser() {
	    	return null;
	    }
    }

The framework that I am using requires me to configure/build a RequestCreator for each type of Request that I am going to use. 

To make the process of adding new classes for different requests as pain-free as possible I moved the building logic of the *RequestCreator* in an abstract class so this way I'll only have to extend it and override some methods that indicate how the *RequestCreator* should be configured - sort of a *Template Method* pattern.

The actual problem is this: when someone creates an instance of *UserRequest*, **super()** gets called right before *UserRequest*'s member variables are set. What this means is that the *RequestCreator* will already be built by the time mHeaders are set. This is wrong because the bulding process needs a reference to mHeaders in order for it to behave as intended.

One way to get around this is to leave *BaseRequest*'s constructor empty and to call setupRequestCreator() in the *UserRequest*'s constructor, but only after setting the instance variables first; this however feels "hacky" because other people will have to be aware of this when they are creating new subclasses.

I tried other workarounds too, but nothing felt quite right. I was hoping someone could provide me with a better solution