我有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;
}
}
答案 0 :(得分:0)
对于类型变量部分,它将是,使用此接口:
public interface IFileHandler<T> {
T getContent();
}
这个实现类声明和方法签名:
class JsonFileHandler<T> implements IFileHandler<T> {
public T getContent() {
T t = null;
// ...
return t;
}
}