我有一个方法来处理Collection< Nodes>作为参数传入.此集合将被修改,因此,我认为首先制作一个副本是很好的.我如何命名参数和局部变量,例如节点在下面的例子中?
List<Nodes> process(Collection<Nodes> nodes) { List<Nodes> nodes2 = new ArrayList<>(nodes); ... }
另一个例子考虑以下变量是从String参数解析的int:
public void processUser(final String userId) { final int userId2 = Integer.parseInt(userId); ...
解决方法
名称变量问题的一个很好的方法是使用提示变量实际含义的名称.在您的示例中,您使用的名称不会对方法功能或变量的含义产生任何影响,因此很难选择名称.
在JDK中有很多例如你的例子. Arrays#copyOf
:
public static <T,U> T[] copyOf(U[] original,int newLength,Class<? extends T[]> newType) { @SuppressWarnings("unchecked") T[] copy = ((Object)newType == (Object)Object[].class) ? (T[]) new Object[newLength] : (T[]) Array.newInstance(newType.getComponentType(),newLength); System.arraycopy(original,copy,Math.min(original.length,newLength)); return copy; }
在这种情况下,它们调用参数original和本地变量副本,完全表示返回值是参数的副本.准确地说,复制是这种方法所做的,因此被命名.
使用与您的情况相同的推理(请考虑重构为您的方法和变量提供更有意义的名称)我将命名您的本地的节点类似processedNodes,以表达该变量是什么,并与您的方法的名称一致.
编辑:
您在编辑中添加的新方法的名称不会提供有关其操作的提示.我会假设它修改通过参数传递id的用户的某些属性(可能在数据库中).
如果是这样的情况(或类似的),我认为适当的方法你
可以申请的是,每种方法都应该有一个责任.根据你的方法的名字,它应该处理用户,因为你需要一个int userId.解析String userId的责任应该超出此方法的范围.
使用所提出的方法具有以下优点:
>如果您必须向输入添加其他验证,则您的课程将不会更改.>您的课程不负责处理NumberFormatException,这必须是应用程序的责任.>如果必须处理不同类型的输入(例如float userId),您的processUser方法将不会改变.