如何使用guice使用通用的jsonFile处理程序?

时间:2015-02-18 10:45:19

标签: java generics interface dependency-injection guice

我有2个存储库类:

public class ResponseRepository implements IRoutingResponseRepository {

    private final String baselineFileName;

    @Inject
    @Singleton
    public ResponseRepository(@Named("baseline_file") String baselineFileName) {
        this.baselineFileName = baselineFileName;
    }

    @Override
    public E2EResult getBaseLine() {
        E2EResult e2EResult = null;
        ObjectMapper mapper = new ObjectMapper();
        try
        {
            e2EResult =  mapper.readValue(new File(baselineFileName), E2EResult.class);
        } catch (JsonGenerationException e)
        {
            e.printStackTrace();
        } catch (JsonMappingException e)
        {
            e.printStackTrace();
        } catch (IOException e)
        {
            e.printStackTrace();
        }
        return e2EResult;
    }
}

public class StatsRepository implements IRoutingResponseRepository {

    private final String baselineFileName;

    @Inject
    @Singleton
    public StatsRepository(@Named("stats_file") String baselineFileName) {
        this.baselineFileName = baselineFileName;
    }

    @Override
    public StatsObj getStats() {
        StatsObj statsObj = null;
        ObjectMapper mapper = new ObjectMapper();
        try
        {
            statsObj =  mapper.readValue(new File(baselineFileName), StatsObj.class);
        } catch (JsonGenerationException e)
        {
            e.printStackTrace();
        } catch (JsonMappingException e)
        {
            e.printStackTrace();
        } catch (IOException e)
        {
            e.printStackTrace();
        }
        return statsObj;
    }
}

如何将公共代码重构为通用代码?

我希望guice在fileName = E2EResult.csv<E2EResult> fileName = StatsObj.csv

时使用<StatsObj>

我试过了:

但是我错误地写了泛型。它显示错误。 而且我也不确定如何让guice注入不同的fileName

public interface IFileHandler<T> {

    T getContent();
}

public class JsonFileHandler implements IFileHandler<T> {


    String fileName;

    @Inject
    public JsonFileHandler(String file) {
        this.fileName = file;

        //Constants.RESULTS_BASELINE_FILE
    }

    public <T> T getContent() {
        T t = null;
        ObjectMapper mapper = new ObjectMapper();
        try {
            t = mapper.readValue(new File(fileName), T.class);
        } catch (JsonGenerationException e) {
            e.printStackTrace();
        } catch (JsonMappingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return t;
    }
}

1 个答案:

答案 0 :(得分:0)

对于类型变量部分,它将是,使用此接口:

public interface IFileHandler<T> {
    T getContent();
}

这个实现类声明和方法签名:

class JsonFileHandler<T> implements IFileHandler<T> {
    public T getContent() {
        T t = null;
        // ...
        return t;
    }
}