0

我正在为方法(和较小程度的变量)寻找一个好的命名约定。假设您在元编程或反射框架中有一些工厂类,并且这些方法与 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(...)。

4

4 回答 4

3

方法名称应该是动词,而不是名词。

所以如果你想要一些通用的东西,我会选择wrap()

命名方法

尽管方法名可以是任何合法标识符,但代码约定限制了方法名。按照惯例,方法名称应该是小写动词或以小写动词开头的多词名称,后跟形容词、名词等。在多词名称中,第二个和后续单词的首字母应该大写。这里有些例子:
run
runFast
getBackground
getFinalData
compareTo
setX
isEmpty

来源:Java™ 教程>学习 Java 语言>>定义方法


关于重用方法名称。它有效,但需要一些小心。这是一个例子:

具有许多构造函数的对象:

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

于 2010-11-26T10:27:27.420 回答
2

在这种情况下,我会推荐wrapByteand wrapInt,或者只是重载create方法。

于 2010-11-26T10:33:32.677 回答
1

使用前缀“from”怎么样?

public class WrapperFactory {
    // create byte wrapper
    public MyWrapper fromByte(byte param) { ... }

    // create int wrapper
    public MyWrapper fromInt(int param) { ... }
}

这不遵循标准的 Java 命名约定,但它可能足够直观,可以原谅。

于 2010-11-26T10:47:40.690 回答
0

在你的情况下,方法newWrapper(byte...), newWrapper(int...)会更好。或者create,或者其他用一个词描述该方法的作用的东西。

于 2010-11-26T10:32:41.927 回答