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

本文探讨了在 Java 中如何处理类 `TransactionData` 与 `HttpServletRequest` 的耦合问题。作者提出了使用 `TransactionDataExtractor` 接口以减少耦合,但面临如何在接口实现中传递构造参数的挑战。考虑了通过构造函数传递 `HttpServletRequest` 和通过泛型参数 `extract()` 方法,但对这两种方式都有所顾虑。作者寻求更好的解决方案,希望能找到一种既能保持类型安全又能避免过多样板代码的方法。
摘要由CSDN通过智能技术生成

目前我有一个类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.

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值