加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java:在构造函数或方法中传递参数?

发布时间:2020-12-15 04:55:15 所属栏目:Java 来源:网络整理
导读:目前我有一个类TransactionData,它只比POJO多一点.我从HTTPServletRequest构建对象.我所做的: public class TransactionData{ // ... public TransactionData(HttpServletRequest request) throws IOException { // do actual work here }} 这里有很多WTF,
目前我有一个类TransactionData,它只比POJO多一点.我从HTTPServletRequest构建对象.我所做的:

public class TransactionData
{

    // ...

    public TransactionData(HttpServletRequest request) throws IOException
    {
        // do actual work here
    }

}

这里有很多WTF,最令人不安的是对象TransactionData与HTTPServletRequest紧密耦合.我的想法:使用extract()方法创建一个TransactionDataExtractor接口,以便我可以实现不同的类来构建对象.

public interface TransactionDataExtractor
{
    public TransactionData extract();
}

但是,如何将构建TransactionData所需的东西传递给每个实现?想到的第一件事就是使用不同的构造函数,如下所示:

public class TransactionDataExtractorRequest implements TransactionDataExtractor
{
    private HttpServletRequest httpRequest;

    public TransactionDataExtractorRequest(HttpServletRequest httpRequest)
    {
        this.httpRequest = httpRequest;
    }

    public TransactionData extract()
    {
        // do whatever is required
    }

}

但在这种情况下,每当我需要构建一个新的TransactionData对象时,我必须创建一个新的TransactionDataExtractorRequest.我完全不喜欢隐含的依赖.
我能想到的另一个选择是将一个Object参数传递给extract()并在需要时抛出它,放弃类型安全并引入大量的锅炉板丑陋的代码

public TransactionData extract(Object o)
    {
        HttpServletRequest h;
        if (o instanceof HttpServletRequest)
        {
             h = (HttpServletRequest)o;
        } 
        //...
    }

我不知道自己是否已经说清楚了.我觉得我错过了一些东西,我知道解决方案非常简单,但我无法掌握它.
有什么想法吗?
TIA.

编辑:问题甚至可能是我的预感完全错误,我可以毫不后悔地解雇它

解决方法

如果在将源对象传递给extract()时唯一的问题是确保类型安全,则可以使用泛型:

public interface TransactionDataExtractor<E> {
    public TransactionData extract(E source); 
} 

public class TransactionDataExtractorRequest 
    implements TransactionDataExtractor<HttpServletRequest> {
    public TransactionData extract(HttpServletRequest source) { ... }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读