我正在观看Google Tech Talks视频,他们经常提到多态性.
什么是多态,它是什么,以及它是如何使用的?
Java的boolean允许值true,并false同时允许布尔值true,false和null.我已经开始将我的booleans 转换为Booleans.这可能导致测试中的崩溃,例如
Boolean set = null;
...
if (set) ...
Run Code Online (Sandbox Code Playgroud)
而考试
if (set != null && set) ...
Run Code Online (Sandbox Code Playgroud)
看似人为,容易出错.
如果有的话,使用Boolean带空值的s 是否有用?如果从来没有,那么被包裹物体的主要优点是什么?
更新:有很多有价值的答案,我在自己的答案中总结了一些.我充其量是Java的中间人,所以我试图展示我发现有用的东西.请注意,问题是"错误的措辞"(布尔值不能"具有空值"),但我已经离开它以防其他人有相同的误解
我有一位同事告诉我,他曾经为一家公司工作,该公司的政策是在代码中永远不会有条件("if"和"switch"语句)并且他们让代码中的所有决策都使用多态性和(我猜)其他一些OO原则.
我有点理解这背后的原因,让代码更干,更容易更新,但我正在寻找对这个概念的更深入的解释.或者它可能是更通用的设计方法的一部分.
如果任何人有任何资源或愿意解释甚至有更多与此相关的术语我可以用来找到更多的答案,我将非常感激.
我发现一个关于SO的问题有点相关但我不熟悉C++,所以我不太了解那里的答案.
(我不是OO guru btw,但我可以管理)
我最熟练的PHP,在那之后,我更喜欢那些使用这些语言的信息.
更新:我会问我的同事有关他的确切含义的更多信息.
2015年更新:经过多年的编程经验,我现在看到这个策略的目的可能是阻止程序员通过在某些地方添加条件(if语句)来随意添加功能.扩展软件的更好方法是使用"开放/封闭原则",其中使用继承和多态来扩展软件.我强烈怀疑这项政策是否对所有条件都非常严格,因为如果没有这些条件,这种政策就很难完全实现.
我记得有些时候(可能是几年前)我在Stackoverflow上阅读了尽可能少的if-tests编程的魅力.这个问题有点相关,但我认为压力在于使用许多小函数,它们根据接收到的参数返回由测试确定的值.一个非常简单的例子就是使用它:
int i = 5;
bool iIsSmall = isSmall(i);
Run Code Online (Sandbox Code Playgroud)
用isSmall()看起来像这样:
private bool isSmall(int number)
{
return (i < 10);
}
Run Code Online (Sandbox Code Playgroud)
而不只是这样做:
int i = 5;
bool isSmall;
if (i < 10) {
isSmall = true;
} else {
isSmall = false;
}
Run Code Online (Sandbox Code Playgroud)
(逻辑上这段代码只是示例代码.它不是我正在制作的程序的一部分.)
我相信这样做的原因是因为它看起来更好并且使程序员不易出现逻辑错误.如果正确应用了这种编码约定,你几乎看不到任何地方的if-tests,除了那些唯一目的是进行测试的函数.
现在,我的问题是:有关于此约定的任何文档吗?在这种风格的支持者和反对者之间是否有任何地方可以看到疯狂的争论?我试着搜索引入我的Stackoverflow帖子,但我再也找不到了.
最后,我希望这个问题不会被打倒,因为我不是要求解决问题.我只是希望能够听到更多关于这种编码风格的信息,并且可能会提高我将来会做的所有编码的质量.
functional-programming if-statement coding-style conventions
oop ×2
polymorphism ×2
boolean ×1
coding-style ×1
conditional ×1
conventions ×1
if-statement ×1
java ×1