我正在为方法(以及较小程度的变量)寻找一个好的命名约定。假设您在元编程或反射框架中有一些工厂类,并且这些方法与 java 的原始类型相关。
// dumb example
public class WrapperFactory {
// create byte wrapper
public MyWrapper byte(byte param) { ... }
// create int wrapper
public MyWrapper int(int param) { ... }
}
从可读性的角度来看,我希望有合理的短方法名称。与所示的示例不同,不同类型的方法签名可能相同,因此仅使用带有一堆重载的 create(...) 方法是不可能的。
从方法的上下文(毕竟它们在 WrapperFactory 中)来看,很明显它们将生成一个 Wrapper。所以像 byteWrapper() (或者更冗长的 createByteWrapper())之类的东西似乎是完全多余的。
对于简短的方法名称有什么建议吗?
<小时/>编辑:总体趋势似乎是具有重载的方法最常见,它适用于我的大多数工厂方法,但目前有四个具有相同签名的 createXXXWrapper(...) ,它们创建不同行为的包装器(但一般类型相同)。 因此,为了使所有类型保持一致,我目前赞成 prefixXXX() 命名建议。什么前缀最好(wrap不是我最喜欢的之一,还有其他工厂创建不同的对象,这些对象在功能上不是包装器)。所以我想要通用前缀,例如 newX(...)、createX(...) 或 getX( ...)。
最佳答案
方法名称应该是动词,而不是名词。
因此,如果您想要通用的东西,我只需使用 wrap()
Naming a Method
Although a method name can be any legal identifier, code conventions restrict method names. By convention, method names should be a verb in lowercase or a multi-word name that begins with a verb in lowercase, followed by adjectives, nouns, etc. In multi-word names, the first letter of each of the second and following words should be capitalized. Here are some examples:
run
runFast
getBackground
getFinalData
compareTo
setX
isEmpty
来源:The Java™ Tutorials > Learning the Java language > Classes > Defining Methods
<小时/>以及关于重用方法名称。它有效,但需要一些小心。这是一个例子:
一个对象具有多个构造函数:
public class Wrapper{
private final String type;
public Wrapper(final byte inner){ type = "byte"; }
public Wrapper(final short inner){ type = "short"; }
public Wrapper(final int inner){ type = "int"; }
public Wrapper(final char inner){ type = "char"; }
public Wrapper(final Object inner){ type = "Object"; }
public Wrapper(final float inner){ type = "float"; }
public Wrapper(final double inner){ type = "double"; }
public Wrapper(final boolean inner){ type = "boolean"; }
public String getType(){ return type; }
}
一些工厂方法来获取此类对象:
public static Wrapper wrap(final byte inner){ return new Wrapper(inner); }
public static Wrapper wrap(final int inner){ return new Wrapper(inner); }
public static Wrapper wrap(final short inner){ return new Wrapper(inner); }
public static Wrapper wrap(final Object inner){ return new Wrapper(inner); }
public static Wrapper wrap(final boolean inner){ return new Wrapper(inner); }
public static Wrapper wrap(final char inner){ return new Wrapper(inner); }
public static Wrapper wrap(final float inner){ return new Wrapper(inner); }
public static Wrapper wrap(final double inner){ return new Wrapper(inner); }
测试代码:
public static void main(final String[] args){
final byte byteValue = (byte) 0x12;
final short shortValue = (short) 10;
System.out.println(wrap(byteValue).getType());
System.out.println(wrap(10).getType());
System.out.println(wrap(shortValue).getType());
System.out.println(wrap("").getType());
System.out.println(wrap(true).getType());
System.out.println(wrap('a').getType());
System.out.println(wrap(13.1f).getType());
System.out.println(wrap(13.1d).getType());
}
输出(如预期):
byte
int
short
Object
boolean
char
float
double
关于java - 当直观的名称是保留关键字时,如何简洁地命名方法/变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4284391/