我正在寻找方法的良好命名约定(以及较小程度的变量)。假设你在元编程或反射框架中有一些工厂类,这些方法与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()命名建议。什么前缀最好(换行不是我最喜欢的,有其他工厂创建不是功能不包装的不同对象)。所以我想要像 new X(...),创建 X(...)或获取 X这样的通用前缀( ...)。
答案 0 :(得分:3)
方法名称应该是动词,而不是名词。
因此,如果您想要通用的东西,我会选择wrap()
命名方法
虽然方法名称可以是任何合法标识符,但代码约定限制方法名称。 按照惯例,方法名称应该是小写的动词或以小写的动词开头的多字名称,后跟形容词,名词等。在多字名称中,第一个字母是第二个和下一个词中的每一个都应该大写。以下是一些例子:
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());
}
输出(按预期):
字节
INT
短
对象
布尔
焦炭
浮
双
答案 1 :(得分:2)
在这种情况下,我建议使用wrapByte
和wrapInt
,或者只是重载create
方法。
答案 2 :(得分:1)
如何使用前缀“from”?
public class WrapperFactory {
// create byte wrapper
public MyWrapper fromByte(byte param) { ... }
// create int wrapper
public MyWrapper fromInt(int param) { ... }
}
这不符合标准的Java命名约定,但它可能足够直观,可以被原谅。
答案 3 :(得分:0)
在你的情况下,方法newWrapper(byte...), newWrapper(int...)
会更好。或者create
,或者其他一些用一个词来描述该方法的东西。