我正在尝试实现一个工厂模式,其中方法返回正确的对象。当调用工厂方法时,我的私有构造函数被调用,这会对该类的结果产生影响。我将 print 语句放入构造函数中以查看它是否被调用,并且无论向工厂提供什么字符串,它都会导致调用。public class ExcerptFilter implements TokenFilter{ private boolean started; private ExcerptFilter() { start(); System.out.println("constructor called"); } public static TokenFilter factory(String startTag, String stopTag) { TokenFilter result; if(startTag != null && startTag.trim().length() > 0){ if(stopTag != null && stopTag.trim().length() > 0) result = new ExcerptFilterStartAndStop(startTag, stopTag); else result = new ExcerptFilterStartOnly(startTag); }else{ if(stopTag != null && stopTag.trim().length() > 0) result = new ExcerptFilterStopOnly(stopTag); else result = new ExcerptFilter(); } return result; }工厂应该在 ExcerptFilter 中返回嵌套类的正确实例。它不应该对构造函数进行任何调用,除非 factory() 的 who 参数为零长度或 null。
1 回答
叮当猫咪
TA贡献1776条经验 获得超12个赞
您的代码不完整,但猜测是您的其他 TokenFilter 实现类:
ExcerptFilterStopOnly
ExcerptFilterStartAndStop
ExcerptFilterStartOnly
所有这些都从 ExcerptFilter 类扩展,如果您不想调用 ExcerptFilter 构造函数,那么您不能让这些类从它扩展。
另一种可能的解决方案:
是的,让这些类从 ExcerptFilter 扩展,但为 ExcerptFilter 提供不止一个构造函数,并通过显式调用正确的超级构造函数来严格控制在子类中调用哪个构造函数。
添加回答
举报
0/150
提交
取消