Tag: 编码风格

再一次在字符串附加vs concat vs +

可能是我分裂头发,但我想知道以下情况: String newString = a + b + c; //case 1 String newString = a.concat(b).concat(c); //case 2 StringBuilder newString = new StringBuilder(); //case 3 newString.append(a); newString.append(b); newString.append(c); 哪个最好用? 我最好的意思是任何方式 。 阅读这些,其他post说案例3不是最佳表现明智,其他案例1最终将在案例3等。 更具体。 例如,将所有设置放在一边,如果你不得不维护他的代码,哪种风格更适合从另一个程序员那里看到它? 或者您认为哪种编程效率更高? 或者你会认为更快等等。 我不知道怎么表达这个。 像案例3这样的答案可能会更快,但绝大多数程序员更喜欢案例1,因为如果它在某种程度上得到了很好的阐述,它也是最可读的

在这样的构造函数中调用init方法是违反Clean Code的吗?

我在下面的代码中关注的是构造函数的参数实际上并没有直接映射到类的实例字段。 实例字段从参数中获取值,并且我正在使用initalize方法。 此外,我做了一些事情,以便创建的对象可以直接在后面的代码中使用,例如调用drawBoundaries()。 我觉得它正在做一个抽象意义上创建(初始化)Canvas的意思。 我的构造函数做得太多了吗? 如果我添加方法从外部显式调用构造函数中的东西,那就错了。 请让我知道你的看法。 public class Canvas { private int numberOfRows; private int numberOfColumns; private final List listOfCells = new LinkedList(); public Canvas(ParsedCells seedPatternCells) { initalizeCanvas(seedPatternCells); } private void initalizeCanvas(ParsedCells seedPatternCells) { setNumberOfRowsAndColumnsBasedOnSeedPatten(seedPatternCells); drawBoundaries(); placeSeedPatternCellsOnCanvas(seedPatternCells); } … PS:对不起,如果这看起来像个愚蠢的问题; 我的代码将由OOP大师审核,我只是担心:-0 编辑: 我读了一些关于initalizeCanvas()被覆盖的方法的担忧 – 幸运的是这些方法是私有的,不会调用任何其他方法。 无论如何,经过对网络的进一步研究,我开始喜欢这个…我希望你们同意!! ?? public class Canvas { private int numberOfRows; […]

我应该使用保护条款,并尽量避免使用else条款?

我读过(例如来自Martin Fowler)我们应该在OOP中的(短)方法中使用保护子句而不是单一返回。 我也读过(从某个地方我不记得),在可能的情况下应该避免使用else子句。 但我的同事(我在一个只有3个人的小团队中工作)迫使我不要在方法中使用多个返回,并尽可能多地使用else子句,即使else块中只有一个注释行。 这使我很难遵循他们的编码风格,因为例如,我无法在一个屏幕中查看方法的所有代码。 当我编写代码时,我必须首先编写保护子句,然后尝试将其转换为多个返回的forms。 我错了,或者我应该怎么做?

在Java中使用.equals方法的正确方法是什么?

我正在和我的CompSci教授交谈,他建议将所有String .equals方法写成: “Hello World”.equals(fooString); 而不是: fooString.equals(“Hello World”); 这两行都编译,但我想知道第一种方式有什么好处? 我总是以后一种方式做到这一点。 这是错的吗? 什么是常见/常规?

当类被声明为包私有时,我们应该声明一个公共构造函数吗?

我认为在这种情况下,不需要声明公共构造函数,因为无论如何都不能在包外部访问类。 但是当类只有包私有构造函数时,是否存在一些隐藏的影响?

在变量或类名前面的_(下划线)中是否有标准?

我见过一些程序员在类名前面使用_ (下划线),而其他程序员则使用它作为局部变量。 Java标准是否要求/建议在私有实例变量或类名前面使用_(下划线)?

代码行换行 – 如何处理长行

我面对的是一个长度为153个字符的特定行。 现在,我倾向于在120个字符之后破坏事物(当然,这在很大程度上依赖于我和当地的惯例。)但说实话,无论我在哪里打破线条都会让它看起来很糟糕。 所以我正在寻找一些关于我应该为此做些什么的想法。 这是一行: private static final Map<Class, PersistentHelper> class2helper = new HashMap<Class, PersistentHelper>(); 我对这两个关于如何/在哪里打破界限(及其原因)的想法以及缩短生产线本身的方法持开放态度。 我们不是一个Java商店,并没有针对此类事情的本地约定,或者显然我只是遵循它们。 谢谢!

布尔检查’if’条件

哪一个是更好的Java编码风格? boolean status = true; if (!status) { //do sth } else { //do sth } 要么: if (status == false) { //do sth } else { //do sth }

Java中getter / setter的用途是什么?

我已经看到成员变量给出了私有修饰符,然后使用getter / setter方法来设置和获取变量的值(在标准化的名称中)。 那么为什么不将变量公开给自己(除了像弹簧框架这样依赖于IOC的getter / setter等的情况)。 它有助于达到目的。 在C#中,我看到了getter / setter和成员变量的大写。 为什么不将变量公开?

什么时候可以对业务逻辑使用exception处理?

我认为可以接受的是,作为Java中的一般规则(也许是任何具有exception处理的语言),应该尽量避免使用exception处理来实际处理业务逻辑。 一般来说,如果预计会发生某种情况,那么应该检查它并直接处理它,而不是依赖于exception处理来为您进行检查。 例如,以下不被视为良好做法: try{ _map.put(myKey, myValue); } catch(NullPointerException e){ _map = new HashMap(); } 相反,延迟初始化应该更像这样: if(_map == null){ _map = new HashMap(); } _map.put(myKey, myValue); 当然,可能存在比简单处理延迟初始化更复杂的逻辑。 因此,鉴于此类事情通常不受欢迎……如果有的话,依赖于某些业务逻辑发生的exception是一个好主意吗? 是否准确地说任何一个人感到被迫使用这种方法的实例是否真的突出了所使用的API的弱点?