class DXJob extends DXExecution {

    @Override
    public <T> T getOutput(Class<T> outputClass) throws IllegalStateException {
        // {fields: {output: true, state: true}}
        Describe d =
                describeImpl(DXJSON
                        .getObjectBuilder()
                        .put("fields",
                                DXJSON.getObjectBuilder().put("output", true).put("state", true)
                                        .build()).build());
        if (d.getState() != JobState.DONE) {
            throw new IllegalStateException("Expected job to be in state DONE, but it is in state "
                    + d.getState());
        }
        return d.getOutput(outputClass);
    }

    private  DXJob(String jobId);
    private  DXJob(String jobId, DXEnvironment env);
    private  DXJob(String jobId, DXEnvironment env, JsonNode cachedDescribe);

}