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.我完全不喜欢隐含的依赖. public TransactionData extract(Object o) { HttpServletRequest h; if (o instanceof HttpServletRequest) { h = (HttpServletRequest)o; } //... } 我不知道自己是否已经说清楚了.我觉得我错过了一些东西,我知道解决方案非常简单,但我无法掌握它. 编辑:问题甚至可能是我的预感完全错误,我可以毫不后悔地解雇它 解决方法
如果在将源对象传递给extract()时唯一的问题是确保类型安全,则可以使用泛型:
public interface TransactionDataExtractor<E> { public TransactionData extract(E source); } public class TransactionDataExtractorRequest implements TransactionDataExtractor<HttpServletRequest> { public TransactionData extract(HttpServletRequest source) { ... } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |