当直觉名称是保留关键字时,如何简洁地命名方法/变量?

时间:2010-11-26 10:22:56

标签: java naming-conventions primitive reserved-words

我正在寻找方法的良好命名约定(以及较小程度的变量)。假设你在元编程或反射框架中有一些工厂类,这些方法与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 个答案:

答案 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)

在这种情况下,我建议使用wrapBytewrapInt,或者只是重载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,或者其他一些用一个词来描述该方法的东西。