- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我这样做有点倒退,因为我遵循了特定的项目说明顺序。我有两个 java 类。其中一个模拟 Linux 的 grep 功能,另一个模拟 lineCount 功能。我已经实现了它们,但项目的下一步是使用模板方法模式创建一个父类(super class),该模式“将包含其他两个程序共有的所有字段和算法”。
两者之间有很多共同的功能,很明显哪些部分需要成为模板的一部分,哪些需要成为实现的一部分。例如,它们中的每一个都需要能够根据用于调用方法的路径字符串创建 File 对象,并使用用于调用该方法的正则表达式搜索 File 的列表方法。这是通用功能,绝对应该成为模板/抽象类的一部分。
如果能够声明这样的东西就好了:
public abstract class RegexCommands{
protected Variables;
public Map<things> myMethod(variables){
//common functionality which includes storing and using the variables
hookMethod(); //based on what you create in commonFunctionality
return resultAfterHookMethod;
}
}
public class Grep extends RegexCommands{
public hookMethod(){
class specific things;
}
}
public class lineCount extends RegexCommands{
public hookMethod(){
class specific things;
}
}
然后用
调用它RegexCommands myObject = new Grep();
myObject.myMethod(variables);
并让它返回我正在寻找的内容(Grep 对象的 grep 命令,LineCount 对象的 lineCount)。但是,说明明确指出它将像这样调用:
RegexCommands myObject = new Grep();
myObject.grep(variables);
RegexCommands myObject = new LineCount();
myObject.lineCount(variables);
而且使用的变量也有细微差别。 (例如,lineCount 不需要 substringSelectionPattern)我现在设置它的方式是 Hook 方法调用 super 到它们的父级,模板调用 myMethod。这显然不是它应该工作的方式。一方面,似乎我不得不在我的模板中引入非通用方法,这些方法只调用主模板方法,这意味着理论上(尽管我还没有测试过)可以做类似的事情
RegexCommands myObject = new LineCount();
myObject.grep(variables);
这不是我想要允许的行为,而且似乎违背了使用模板的目的。另一个问题(我实际上遇到过)是我的 hookMethods 似乎无法访问在 commonFunctionality 中创建的实例变量(即当我尝试访问在 commonFunctionality 中创建的匹配器时,它返回 null 即使我将其声明为实例变量而不是方法级范围,就像我更喜欢的那样)。
所以我有点卡住了,正在寻求帮助。我如何让这些对象在模板中使用 myMethod 模式而没有这种破坏我的对象的分离性的可怕解决方法,以及我如何让非通用方法使用来自 commonFunctionality 的 ArrayLists 和/或映射而不将所有内容作为参数传递(有人建议我不要这样做,因为它破坏了使用模板的意义)?
最佳答案
For one thing, it seems like I have had to introduce non-common methods to my template that just call the main template method,
是的,您需要为给定的要求引入此类方法。但是正如您稍后所说,这是不正确的,因为 LineCount 对象可以调用 grep 方法,这可以通过在您将要编写的非常用方法中执行 instance of
检查来避免。如果工作符合预期的要求,则执行该工作,否则就退出。
对于你原来遇到的问题
my hookMethods don't seem to have access to the instance variables created in commonFunctionality (ie when I try to access a matcher that was created in commonFunctionality, it returns null even if I declare it as an instance variable instead of a method-level scope, like I would prefer).
不能在java中定义抽象变量,java中唯一合法的变量修饰符是
public, protected, private, static, final, transient, volatile
你需要有一个 commonFunctionality
的具体实现,你可以为它提供一个 getter 方法。您可以在抽象类中为此定义一个抽象方法。有关更多信息,请参阅此帖子的答案 Abstract variables in Java?
关于java - 如何在模板方法模式中通过两个名称调用模板方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21277701/
我正在尝试做这样的事情:Name[i] = "Name"+ (i+1) 在 forloop 中,这样数组的值将是:Name[0] = Name1,Name[1] = Name2,Name[2] = N
我读了here,在GSP中我们可以这样写: ${params.action} 从GSP中,我们可以使用${params.action}作为参数调用Javascript函数(请参阅here)。 是否有其
我的问题:非常具体。我正在尝试想出解析以下文本的最简单方法: ^^domain=domain_value^^version=version_value^^account_type=account_ty
我创建了一条与此类似的路线: Router::connect("/backend/:controller/:action/*"); 现在我想将符合此模式的每个 Controller 路由重命名为类似
我在 Visual Studio 2013 项目中收到以下警告: SQL71502 - Procedure has an unresolved reference to object 最佳答案 这可以
任何人都可以指导我使用名称/值 .NET 集合或 .NET 名称/值字典以获得最佳性能吗?请问最好的方法是什么?我的应用程序是 ASP.NET、WCF/WF Web 应用程序。每个集合应该有 10 到
我在 Zend Framework 2 中有一个默认模块: namespace Application\Controller; use Zend\Mvc\Controller\AbstractActi
这是表格: 关于javascript - 在 javascript 中,这是一个有效的结构吗? : document. 名称.名称.值?,我们在Stack Overflow上找到一个类似的
HtmlHelper.ActionLink(htmlhelper,string linktext,string action) 如何找出正确的路线? 如果我有这个=> HtmlHelper.Actio
我需要一些有关如何将 Controller 定义传递给嵌套在 outer 指令中的 inner 指令的帮助。请参阅http://plnkr.co/edit/Om2vKdvEty9euGXJ5qan一个
请提出一个数据结构来表示内存中的记录列表。每条记录由以下部分组成: 用户名 积分 排名(基于积分)- 可选字段- 可以存储在记录中或可以动态计算 数据结构应该支持高效实现以下操作: Insert(re
错误 : 联合只能在具有兼容列类型的表上执行。 结构(层:字符串,skyward_number:字符串,skyward_points:字符串)<> 结构(skyward_number:字符串,层:字符
我想要一个包含可变数量函数的函数,但我希望在实际使用它们之前不要对它们求值。我可以使用 () => type 语法,但我更愿意使用 => type 语法,因为它似乎是为延迟评估而定制的。 当我尝试这样
我正在编写一个 elisp 函数,它将给定键永久绑定(bind)到当前主要模式的键盘映射中的给定命令。例如, (define-key python-mode-map [C-f1] 'pytho
卡在R中的错误上。 Error in names(x) <- value : 'names' attribute must be the same length as the ve
我有字符串,其中包含名称,有时在字符串中包含用户名,后跟日期时间戳: GN1RLWFH0546-2020-04-10-18-09-52-563945.txt JOHN-DOE-2020-04-10-1
有人知道为什么我会收到此错误吗?这显示将我的项目升级到新版本的Unity3d之后。 Error CS0103: The name `Array' does not exist in the curre
由于 Embarcadero 的 NNTP 服务器从昨天开始就停止响应,我想我可以在这里问:我使用非数据库感知网格,我需要循环遍历数据集以提取列数、它们的名称、数量行数以及每行中每个字段的值。 我知道
在构建Android应用程序的子项目中,我试图根据根build.gradle中的变量设置版本代码/名称。 子项目build.gradle: apply plugin: 'com.android.app
示例用例: 我有一个带有属性“myProperty”的对象,具有 getter 和 setter(自 EcmaScript 5 起支持“Property Getters 和 Setters”:http
我是一名优秀的程序员,十分优秀!