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

标签 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() 命名建议。什么前缀最好(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/

相关文章:

Java - 使用 Scanner 的编译错误

java - 在 GlassFish 中配置 jdbcRealm 的表命名约定

c - 是否可以使用 C 为 GNU Emacs 编写自定义原语?

javascript - JavaScript 中函数命名的不同方式

java - 为什么 float 可以变成整数而不抛出异常?

Java: float, long 局部初始化

java - 如何使用 GCJ 忽略警告

java - 在 Java 中使用 int a=a+1 和 a++ 的性能差异

java - 如何通过对类的引用来调用instanceof。

java - 为什么不强制执行 Java 命名约定?