繁体   English   中英

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

[英]How to concisely name methods / variables when the intuitive name is a reserved keyword?

我正在为方法(以及程度较小的变量)寻找良好的命名约定。 假设您在元编程或反射框架中有一些工厂类,并且这些方法与Java的原始类型有关。

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

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

method names. 从可读性的角度来看,我想使用相当方法名称。 , so having just a create(...)-method with a bunch of overloads is impossible. 与所示示例不同,不同类型的方法签名 ,因此仅使用带有大量重载的create(...)方法是不可能的。

从方法的上下文(毕竟它们都在WrapperFactory中),很明显它们将产生一个Wrapper。 因此,诸如byteWrapper()(或更冗长的createByteWrapper())之类的东西似乎完全是多余的。

对简短明了的方法名称有何建议?


编辑:总体趋势似乎是带有重载的方法是最常见的,它对我的​​大多数工厂方法都适用,但是目前有四个具有相同签名的createXXXWrapper(...),它们创建具有不同行为的包装器(但是相同的通用类型)。 为了使所有类型保持一致,我目前倾向于使用prefixXXX()命名建议。 哪种前缀是最好的(wrap不是我的最爱之一,还有其他工厂会创建不同的对象,这些对象在功能上不是包装器)。 因此,我想使用通用前缀,例如新的 X(...), 创建 X(...)或获取 X(...)。

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

因此,如果您想要通用的东西,我只需要使用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());
}

输出(预期):

字节
整型

宾语
布尔值
烧焦
浮动

在这种情况下,建议使用wrapBytewrapInt ,或者只是重载create方法。

如何使用前缀“ from”?

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

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

这没有遵循标准的Java命名约定,但是可能很直观,可以原谅。

在您的情况下,方法newWrapper(byte...), newWrapper(int...)会更好。 create ,或用一个词描述该方法的功能的其他方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM