@FunctionalInterface 的命名约定

Naming convention of @FunctionalInterface

按照惯例,类型应该用名词命名,没关系。但是,@FunctionalInterface 是一种特殊类型 - 对象类型,其行为类似于 function/method。在功能的情况下,我觉得选择动词更自然,例如decorate.apply(o) 而不是名词 decorator.apply(o)。还有表示活动的名词,例如decoration.apply(o)

如果我查看 java.util.function 包,所有函数均由名词命名:FunctionOperatorConsumerSupplier、...我应该更喜欢名词动词还是名词表示动词

更新

有时,我们在工厂方法返回 object/function:

时得不到多少帮助
// toList factory returning Collector instance
list.stream().filter(...).collect(toList()); 

@FunctionalInterface 只能标记类型(classes、接口、注释、枚举)。

要命名类型,您应该使用名词,而对于方法,您需要使用动词。

Classes

Class names should be nouns, in mixed case with the first letter of each internal word capitalized. Try to keep your class names simple and descriptive. Use whole words-avoid acronyms and abbreviations (unless the abbreviation is much more widely used than the long form, such as URL or HTML).

class Raster; 
class ImageSprite;

Methods

Methods should be verbs, in mixed case with the first letter lowercase, with the first letter of each internal word capitalized.

run(); 
runFast(); 
getBackground();

Naming Conventions, Oracle

这是我如何定义功能接口的示例。

@FunctionalInterface
interface Decorator {

    void decorate();

}

在代码中,它看起来可读。

Decorator decorator = () -> {};
decorator.decorate();

我对"decorator vs decoration"的看法:

"Decoration"更多的是描述process/result,而"Decorator"是mechanism/tool/means开始,process/to获得那个结果。

如果我在代码中看到 Decoration class,我会想到一些装饰品(如装饰品、油漆、墙纸)的集合,而不是真正进行装饰的人。

如果我看到 DecoratorPainter,我会期待像 decorate()paint() 这样的方法,因为它们 can/should 就是这样做的。

比较 suppliance/supplier -> get()consumption/consumer -> accept(t)