对象方法改写问题

问题描述

定义了一个规则类,属性字段相同并且都还有一个parse方法,但各对象的parse防范实现上稍有差别。如果不定义子类,能在对象创建的时候改写parse方法吗?classrule{privatestring_title="";privatestring_regex="";publicstringtilte{get{returnthis._title;}set{this._title=value}}......publicstringparse(stringinput){stringoutput="";returnoutput;}}......publicArrayListruleNode=newArrayList();ruletmp=newrule();tmp.title="title1";//tmp.parse方法不同示例稍有不同,能有办法改写吗?ruleNode.add(tmp);ruletmp=newrule();tmp.title="title2";//tmp.parse方法不同示例稍有不同,能有办法改写吗?ruleNode.add(tmp);......另外想到的一种方案是,将parse也定义成字符串属性,通过在线编译来实现执行不同的效果。还有其他方案吗?

解决方案

解决方案二:
类创建之后,就不能改写了,除非你做成动态解析的
解决方案三:
创建rule的父类,每个实现下面有不同的parse要么就传参数,parse里面有switch
解决方案四:
你说的“动态解析”是怎么做?引用1楼bdmh的回复:

类创建之后,就不能改写了,除非你做成动态解析的

解决方案五:
如果将规则创建为很多子类,使用时遍历ArrayListruleNode,如何强制转换类型?foreach(???tmpinanalyser.ruleNode){}引用2楼thedolphin的回复:

创建rule的父类,每个实现下面有不同的parse要么就传参数,parse里面有switch

解决方案六:
foreach(ruletmpinanalyser.ruleNode){((rule1)tmp).parse()}??
解决方案七:
该回复于2012-03-27 13:28:08被版主删除
解决方案八:
ruleNode里面对象很多,如果他们是不同的子类,不可能分得清的,也不可能像这样转换:((rule1)tmp).parse()该转换成ruleX呢?引用5楼sql777的回复:

foreach(ruletmpinanalyser.ruleNode){((rule1)tmp).parse()}??

解决方案九:
if(tmpisruleX)((ruleX)tmp).parse()
解决方案十:
ruleX很多,真不方便逐个判断。引用8楼xiaoyu821120的回复:

if(tmpisruleX)((ruleX)tmp).parse()

解决方案十一:
引用7楼的回复:

ruleNode里面对象很多,如果他们是不同的子类,不可能分得清的,也不可能像这样转换:((rule1)tmp).parse()该转换成ruleX呢?引用5楼sql777的回复:foreach(ruletmpinanalyser.ruleNode){((rule1)tmp).parse();}??

用List<rule>ltrule=newList<rule>();ltrule.Add(rule1);ltrule.Add(rule2);foreach(rulerinltrule){r.parse();//无参数的话r不需要转换成你想要的}

时间: 2024-09-14 07:49:30

对象方法改写问题的相关文章

Lua中让回调函数支持回调对象方法的解决方法_Lua

在 Cocos2d-Lua 中,存在很多异步或延迟的操作,例如后台加载图片.等待一定时间执行代码等.这些功能的函数通常要求传入一个 function 作为参数. 复制代码 代码如下: -- 在后台加载一个图像,加载完成后输出消息 display.addImageAsync("hello.png", function()     print("load hello.png completed") end) 但如果我们希望这种回调支持一个对象方法,就有点小困难了.因为

class-这不是2个方法吗,这样写是方法.方法 不都是对象.方法吗

问题描述 这不是2个方法吗,这样写是方法.方法 不都是对象.方法吗 public void init() throws ServletException { // 获取ServletContext对象 getServletContext().setAttribute("count", 0); } 这不是2个方法吗,这样写是方法.方法 不都是对象.方法吗 解决方案 getServletContext()返回一个对象,他后面带点,就和用哪个对象后面带点一样的道理 解决方案二: 万物皆对象,

JavaScript中Math对象方法使用概述

 JavaScript中Math对象方法如向上取整,有小数就整数部分加1,四舍五入.向下取整等等,下面为大家详细介绍下 1.丢弃小数部分,保留整数部分 parseInt(5/2)   2.向上取整,有小数就整数部分加1   Math.ceil(5/2)   3,四舍五入.   Math.round(5/2)   4,向下取整   Math.floor(5/2)   Math 对象的方法 FF: Firefox, N: Netscape, IE: Internet Explorer   方法 描述

Recordset对象方法

对象 发现论坛里面问此类问题的人太多,所以贴出来.很有可能和以前有些人发的帖子重复,如果重复的话不要拿砖头砸我啊 :) Recordset对象方法 Open方法 recordset.Open Source,ActiveConnection,CursorType,LockType,Options Source Recordset对象可以通过Source属性来连接Command对象.Source参数可以是一个Command对象名称.一段SQL命令.一个指定的数据表名称或是一个Stored Proce

复制js对象方法

复制js对象方法,需要的朋友可以参考下   复制代码 代码如下: CSSCommonJS.DeepCopy = function (json) {     if (typeof json == 'number' || typeof json == 'string' || typeof json == 'boolean') {         return json;     } else if (typeof json == 'object') {         if (json instan

java语法问题我解读成是 类.对象.方法

问题描述 java语法问题我解读成是 类.对象.方法 DateShare.user.setId ( ); 是不是类.对象.方法 我理解有没有错,什么情况下才应该这么写,因为我一般情况下看都是 对象.方法 解决方案 DateShare.user.setId ( ); DateShare:类名 user:DataShare类中的一个静态成员变量,是一个已经初始化的对象. setId():user对象的一个方法 类似的应用场景有: System.out.println() System.err.pri

ios-IOS 如何在C里调用OC对象方法

问题描述 IOS 如何在C里调用OC对象方法 在做一个物联网的东东,接口程序是C语言的,要调用我写的一个类里的蓝牙连接收发方法,然后返回对应的状态值,求教要如何在一个C语言的类里调用OC类的方法,用得xcode6.1 解决方案 在C语言写的代码里,引入OC类需要的类库,然后声明你需要的OC里的类对象就可以了,oc本身就是C的一个超集,是兼容C的

javascript-关于js中在函数对象构造器中定义对象方法的问题

问题描述 关于js中在函数对象构造器中定义对象方法的问题 为什么函数前要有this.changeName=changeName 我是个新手 谢谢了 解决方案 无关在函数前后,赋值是因为为了调用到person内部定义的changeName函数,要不访问不到.也就是为了实现下面 myMonther.changeName('Ballmer');//这么使用函数 解决方案二: changeName是个私有函数,外部是访问不到的,所以要想在外部能够访问到就必须给个外部能访问到的公有属性或者公有方法

java中 静态类.静态方法 。类.方法。 静态类.方法。 对象.方法。他们之间的区别是什么?

问题描述 java中 静态类.静态方法 .类.方法. 静态类.方法. 对象.方法.他们之间的区别是什么? java中 静态类.静态方法 .类.方法. 静态类.方法. 对象.方法.他们之间的区别是什么? 解决方案 [少废话,上代码]: // 外部类,不能是静态的 public class OuterClass { // 静态方法,又称为类方法,属于Test类 public static void staticFun() { } // 非静态方法,又称为实例方法,属于Test类的具体实例 publi