Tag: 设计

子类/继承标准容器?

我经常阅读堆栈溢出这个语句。 就我个人而言,我没有发现任何问题,除非我以多形的方式使用它; 即我必须使用virtual析构函数。 如果我想扩展/添加标准容器的功能,那么比继承一个更好的方法是什么? 将这些容器包装在一个自定义类中需要更多的努力,并且仍然不干净。

可变与不可变对象

我试图让我的头可变与不可变的对象。 使用可变对象会导致很多不好的按压(例如从方法中返回一个字符串数组),但是我很难理解这会带来什么负面影响。 什么是使用可变对象的最佳做法? 你应该尽可能避免它们吗?

用于可选

现在使用Java 8已经有6个多月的时间了,对于新的API更改,我感到非常满意。 我还没有信心的一个领域是什么时候使用Optional 。 我似乎想要在任何地方使用它之间摇摆,可能是null ,根本就没有。 当我可以使用它的时候,似乎有很多情况,我也不确定是否增加了好处(IE可读性/ null安全性),或者只是造成额外的开销。 所以,我举几个例子,我对社区对是否增加好处的想法感兴趣。 1 – 当方法可以返回null时,作为公共方法返回类型: public Optional<Foo> findFoo(String id); 2 – 作为param可能为null的方法参数: public Foo doSomething(String id, Optional<Bar> barOptional); 3 – 作为一个bean的可选成员: public class Book { private List<Pages> pages; private Optional<Index> index; } 4 – 在Collections : 一般来说,我不认为: List<Optional<Foo>> 添加任何东西 – 特别是因为可以使用filter()删除null值等,但是有什么好的用途Optional在集合? 任何我错过的情况?

什么时候应该使用结构而不是类?

MSDN说,你需要使用结构,当你需要轻量级的对象。 当一个结构比一个类更可取时,还有其他的场景吗? 编辑: 有人忘记了: 1. 结构可以有方法! 2. 结构没有继承能力。 另一个编辑: 我了解技术上的差异,我只是没有一个良好的感觉什么时候使用一个结构。

为什么空的catch块是一个坏主意?

我刚刚看到一个关于try-catch的问题 ,哪些人(包括Jon Skeet)认为空的catch块是非常糟糕的主意? 为什么这个? 有没有空的渔获不是错误的设计决定? 我的意思是,例如,有时你想从某处(web服务,数据库)得到一些额外的信息,你真的不在乎你是否会得到这个信息。 所以你试着去得到它,如果有什么事情发生,没关系,我只需要添加一个“catch(Exception ignored){}”,这就是全部