Tag: oop

空对象模式

似乎有越来越多的人说你永远不应该返回null,而应该总是使用Null对象模式。 我可以在使用集合/ map /数组或调用布局函数(如isAuthenticated()时看到NOP的有用性, 如下所示) 。 我没有发现任何完全令人信服的东西。 当我试着整理自己的想法时,请在这里忍受我。 我的理解是,您返回一个已被“清零”的有效对象,而不是返回一个空对象。 因此,例如,客户端将调用以获取对象: Car car = getCar(); 如果不使用NOP,则需要在调用其上的任何方法之前检查从getCar()返回的对象是否为null: if (car != null){ color = car.getColor(); doScreenStuff(color); } 使用NOP而不是getCar()返回null,它现在返回一个已被有效“清零”的Object。 所以现在我们不再需要做if (car != null)并且可以只请求颜色。 因此,我认为当我们调用颜色时,我们的“归零”对象将返回“无”。 这有什么用? 似乎向前移动并在空对象上调用方法会导致像检查null一样痛苦。 现在,当需要显示信息时,我们需要检查颜色是不是“无”,高度不是0,或者你有什么其他值。 因此,基本上,如果汽车为空,则不检查处理的开始,而是检查我们拥有的汽车对象是真车还是替代品。 IE我们不想显示一堆空对象,所以我们需要一些方法来过滤掉所有空对象。 这个过滤是一个额外的步骤,就像调用if(car!= null)一样。 唯一的区别是,通过检查null,我们可以在通过抛出exception发现car对象为空时立即停止处理,而使用NOP,我们在空对象上调用方法并继续前进,直到它到达时间为止显示对象,此时我们过滤掉空。 此外,您需要知道空对象返回的值。 IE确实getColor()返回“none”或“empty”。 显然必须有一些我忽略的东西。 提前致谢。

Value对象应包含多少业务逻辑?

我尊重的一位导师认为,简单的bean浪费时间 – 值对象“必须”包含一些有用的业务逻辑。 另一个人说这样的代码很难维护,并且所有业务逻辑都必须外部化。 我意识到这个问题是主观的。 无论如何要求 – 想从更多角度了解答案。

OO上的JavaWorld:Getters / Setters vs Builder

背景: 我在JavaWorld上发现了这篇文章 ,其中Allen Holub解释了Getters / Setters的替代方法,它保留了隐藏对象实现的原则(他的示例代码也可以在下面找到)。 它解释了类Name / EmployeeId / Money应该有一个构造函数采用单个字符串 – 原因是如果你键入它作为int ,后来需要将它更改为long ,你将不得不修改所有用途这个模式,你没有必要。 问题1: 我想知道:这不是简单地将问题转移到解析被抛出的String参数吗? 例如,如果使用EmployeeId所有代码(从Exporter接收)将String解析为int ,并且突然开始导出long值,则需要修改完全相同的数量…并且如果您开始将其解析为很long它可能必须改为double (即使这对id没有意义)……如果你不能确定将String解析为什么,你就无法实现任何东西 。 问题2: 除了这个问题,我还有另一个问题:我意识到这篇文章已有七年多了,所以有人能指出我最近关于OO设计的一些概述,特别是关于getter / setter和实现隐藏辩论的想法吗? 清单1. Employee:Builder Context public class Employee { private Name name; private EmployeeId id; private Money salary; public interface Exporter { void addName ( String name ); void addID ( String […]

Java虚方法调用有什么用?

我理解什么是java方法调用,并使用它练习了很多例子。 我想知道这个概念的实际情况或需要是什么。 如果有人能够提供一个使用它的现实世界场景以及如果这个概念不存在会发生什么,那将是非常有帮助的?

java protected方法可访问性

在下面的代码中,Consumer类可以访问Parent类的受保护方法。如何实现,因为Parent和Consumer类之间没有关系。请解释 class Parent { public void method1(){ System.out.println(“PUBLIC METHOD”); } private void method2(){ System.out.println(“PRIVATE METHOD”); } protected void method3(){ System.out.println(“PROTECTED METHOD”); } } public class Consumer { public static void main(String[] args){ Parent parentObj = new Parent(); parentObj.method1(); //parentObj.method2(); parentObj.method3(); } } 谢谢

纯抽象类和接口之间的区别

我和一位同事讨论过,他坚持认为在Java和C#等语言中,没有任何理由使用Pure Abstract基类,因为它只是意味着你无法避免缺少多重inheritance。 我觉得他错了,因为我一直以为如果一个东西是名词那么它就是一个对象,如果它是一个动词那么它就是一个界面。 例如,如果我想定义类型Bird ,我想在不实现它的情况下强制执行方法fly ,那么我会将它设为纯抽象类。 如果我想定义一个类型的Flies ,我会把它作为方法fly的接口。 Bird可能会实施Flies 。 我错了吗? 编辑: 我能给予支持我观点的唯一可靠论点是,在未来的某个时刻,设计可能需要改变,以便鸟类可以吃。 如果所有的鸟都吃同样的话,那么就需要将它添加到Bird ,使其成为非纯抽象的。 如果Bird是一个接口,这个改变只会是一场噩梦,因为我不知道从其他基类inheritance的东西是否也实现了我的Bird接口,所以我不能只重构我的问题。

为经验丰富的C ++开发人员快速切换到Java

我正在寻找在线教程/书籍,它们充分了解OOP /设计模式概念,并强调C ++和Java之间的差异(概念和语法),从而允许后者的快速发展。 非常感谢您,感谢您的时间。

Java Lambdas:它如何在JVM中运行并且是OOP吗?

例如,在匿名内部类的情况下,传递(匿名)对象引用并执行该对象的方法。 Lambda是代码块,将在需要时执行。 遇到lambdas时JVM中会发生什么? JVM在哪里存储与lambdas相关的代码块(Heap:Young,Old或Permanent Generation)? 我尝试搜索,我得到了使用lambdas的语法但是无法理解JVM中发生的事情,因为在JAVA中一切都是基于对象的。 所以在OOP的背景下,lambda是如何工作的? lambda违反了OOP概念吗? Lambda是否适合垃圾收集器,因为没有创建对象因此不用担心内存问题和清​​除内存?

Java Enum可以有行为吗?

在Java中,Enum可以完成Enums所做的伟大事情,但也可以拥有方法(行为和逻辑)。 与使用枚举的类相比,它有什么优势? 举例说明这一点也很受欢迎。

何时在Java中使用单方法接口

我在许多像Spring这样的库中看到过,它们使用了很多接口,其中包含BeanNameAware等单一方法 。 实现者类将使用单个方法实现许多接口。 在什么情况下保持单个方法接口是有意义的? 这样做是为了避免使一个单一的界面变得庞大,例如ResultSet ? 或者是否有一些设计标准主张使用这些类型的接口?