Java 尝试只使用一个方法名
当我用PHP编写表单验证程序时,当创建新方法时,我需要增加旧方法中的参数数量 当我学习Java时,当我读到extends是为了不接触以前测试过的工作代码时,我认为我不应该增加旧方法中的参数数量,而是用新方法覆盖旧方法 想象一下,如果要验证表单的一部分、另一部分和另一部分中的字段是否为空 如果参数不同,您将重载isEmpty,但是,如果参数相等,使用isEmpty、isEmpty2、isEmpty3、三个类和每个类一个isEmpty是否正确,或者,如果两者都错误,我应该怎么做Java 尝试只使用一个方法名,java,php,oop,Java,Php,Oop,当我用PHP编写表单验证程序时,当创建新方法时,我需要增加旧方法中的参数数量 当我学习Java时,当我读到extends是为了不接触以前测试过的工作代码时,我认为我不应该增加旧方法中的参数数量,而是用新方法覆盖旧方法 想象一下,如果要验证表单的一部分、另一部分和另一部分中的字段是否为空 如果参数不同,您将重载isEmpty,但是,如果参数相等,使用isEmpty、isEmpty2、isEmpty3、三个类和每个类一个isEmpty是否正确,或者,如果两者都错误,我应该怎么做 由于java 5,您
void foo(Object…params)
不确定这是否真的回答了您的问题,但在“现实生活”中思考OO的最佳方式是: 面向对象编程。程序执行被视为一个物理模型,模拟世界的真实部分或想象部分的行为 那么,您将如何构建一个物理设备来完成您试图在代码中完成的任务呢?您可能有某种“表单”对象,表单对象将有一些小选项卡或位连接到它以表示不同的表单变量,然后您将构建一个验证器对象,它将表单对象放入插槽中,然后在表单有效时闪烁一盏灯,在表单无效时闪烁另一盏灯。或者,您的验证器可以在一个插槽中获取一个表单对象,然后返回一个表单对象(可能是同一个),但可以通过各种方式进行修改(只有验证器能够理解),以使其“有效”。或者可能验证器是表单的一部分,因此表单中有一个验证器的东西突出出来 我的观点是,试着想象一下这样一台机器会是什么样子,它会如何工作。然后想想那台机器的所有部件,把每一个都变成一个物体。这就是“面向对象”的东西在“现实生活”中的工作方式,对吗 话虽如此,“扩展”一个类是什么意思?好的,类是对象的“模板”——每个对象实例都是通过从一个类构建而成的。子类只是从父类“继承”的类。至少在Java中,有两种继承:接口继承和实现继承。在Java中,您一次最多可以从一个类继承实现(实际的方法代码),但您可以继承多个接口——这些接口基本上只是某些人可以从类外部看到的属性集合 此外,考虑OO编程的一种常见方式是考虑“消息”而不是“方法调用”(事实上,这是Alan Kay为Smalltalk发明的原始术语,Smalltalk是第一种真正被称为“面向对象”的语言)。因此,当您向对象发送
isEmpty
消息时,您希望它如何响应?是否希望能够使用isEmpty
消息发送不同的参数,并使其做出不同的响应?或者您想将isEmpty
消息发送到不同的对象,并让它们做出不同的响应吗?这两种答案都是合适的,具体取决于代码的设计。所以问题是:
如果对于接收相同数量参数的方法isEmpty
,我需要不同的行为,我应该怎么做
isEmptyUser
,isEmptyAddress
,isEmptyWhatever
Validator v=Validator.getInstance(…)然后将其用作:validator.isEmpty()
,并将多态性应用到它的作业中
isEmpty
方法,尽管最终会遇到几乎相同的名称问题。尽管如此,从那里重构并让新类为您进行验证还是比较容易
isEmpty( new Arguments(a,b,c ) ); => arguments.isEmpty();
开放/封闭原则(通常归于Bertrand Meyer)说“软件实体(类、模块、函数等)应该开放以供扩展,但关闭以供修改”。这可能是您在Java时代遇到的原则。在现实生活中,这适用于完成的代码,其中修改、重新测试和重新认证的成本超过了通过直接更改获得的简单性的好处 如果由于需要附加参数而更改方法,则可以选择使用以下步骤: