代码重构-如何使用一种方法处理不同的输出

时间:2019-07-03 13:09:01

标签: java refactoring

我的Repository类从数据库读取并持久存储数据,它有两种方法:

public InputStream findXmlResponse(ID id) {
       Entity entity = (Entity) entityManager
                .createQuery("SELECT e FROM Entity e WHERE e.id = :id")
                .setParameter("id", iid)
                .getSingleResult();
        return new ByteArrayInputStream(entity.getReportFile().getBytes(StandardCharsets.UTF_8));

}

public String findXmlResponseDif(ID id) {
        Entityentity = (Entity ) entityManager
                .createQuery("SELECT e FROM Entitye WHERE e.id = :id")
                .setParameter("id", id)
                .getSingleResult();
        return entity.getReportFile();
}

我想创建一个新的对象ResultObject,它将从这两个方法中返回(而不是两个,只有一个):

public ResultObject findXmlResponseUni(ID id) {
            Entity entity = (Entity ) entityManager
                    .createQuery("SELECT e FROM Entity e WHERE e.id = :id")
                    .setParameter("id", id)
                    .getSingleResult();
            return new ResultObject ;
    }

我尝试过:

@Getter
public class ResultObject extends InputStream {

    @EJB
    private Repository repository;

    private final String xmlResult;

    public ResultObject() {
        xmlResult = null;
    }

    @Override
    public int read() throws IOException {
        return 0;
    }


    public InputStream resultAsInput(ID id) {
        InputStream xmlResult = repository.findXmlResponseUni(id);
            return xmlResult;
    }

    public String resultAsString(ID id) {
        String xmlResult = String.valueOf(repository.findXmlResponseUni(id));
        return xmlResult;
    }
}

稍后,我想在其他类中将它用作String:

public String pullxml() {
                return String.valueOf(repository.findXmlResponseUni();

或作为输入:

 public Display create(ID id) {
        InputStream xmlResult = repository.findXmlResponseUni(id);
        return prepare(xmlResult);
    }

但是在构建项目时遇到了一些错误。我想知道我应该在哪里申请       ByteArrayInputStream(entity.getReportFile()。getBytes(StandardCharsets.UTF_8));

将返回的值转换为InputStream-在ResultObject中还是在将使用Input作为结果的类中? ResultObject应该扩展InputStream吗?使用此类对象并将其进一步传递的最有效方法是什么?

0 个答案:

没有答案