我们团队正在讨论Java代码规范的问题:
interface
:Foo
、IFoo
还是FooInterface
?abstract
:Foo
还是AbstractFoo
?Enums
:Foo
还是FooEnum
?
我想把个人偏好放在一边,因此欢迎提供支持某种规范的理由。
我们团队正在讨论Java代码规范的问题:
interface
: Foo
、IFoo
还是FooInterface
?
abstract
: Foo
还是AbstractFoo
?
Enums
: Foo
还是FooEnum
?
我想把个人偏好放在一边,因此欢迎提供支持某种规范的理由。
来自我的博客:
博客还讨论了一些其他名称不合适的原因。
接口: Foo
原因:你的代码不需要知道它们正在处理一个接口。编写“IFoo”就是这样。相反,“Foo”清楚地表明“Foo”是通用的,其后面的对象可能是“NumFoo”或“StrFoo”。代码确实不需要关心。
抽象类: AbstractFoo
原因:你的代码永远不会直接使用这个类。你将始终通过子类化此类来创建由其他代码使用的任何类。因此,程序员必须充分清楚该类是抽象的。最好的命名方式是使用Abstract!在需要使用AbstractFoo类型引用的地方,应重新考虑是否使用接口。(当然,在C++中这是不可能的)
枚举: FooType 或 FooEnum。就我个人而言,FooType更好,因为Type更容易与“现实世界”相关联。
干杯!
没有特殊的约定。
对于这种类型的类,使用特殊的命名约定基本上是匈牙利记法(不好的那种):它所提供的信息已经存在于语法中,并且通常在IDE(如当您悬停在名称上时)中很容易获得。将其放入名称本身是毫无意义和丑陋的。
类名应该尽可能清楚地描述类的角色。这样做可以导致“自然”的命名约定 - Java命名接口以-able后缀命名就是一个非常好的例子(例如Iterable、Comparable)- 但如果它被普遍强制执行,并且List、Map等必须遵循它,我不想想象结果会是什么样子。
我的规范:
我真的不喜欢在接口名称中使用"I"甚至是FooInterface:
interface FooInterface {
就像写作一样:
class FooClass {
abstract class AbstractFooClass {
这只是一种冗长的表达方式。
就我个人而言,我喜欢的接口有:
Fooable
我的约定:
Foo
;AbstractFoo
;Foo
,但在某些情况下为FooType
。IFoo
非常 .Net,不是Java。我从未见过使用FooInterface
。
иҝҷжҳҜжҲ‘еңЁIONдёӯDEVеӣўйҳҹдҪҝз”Ёзҡ„зәҰе®ҡгҖӮ
жҺҘеҸЈ
interface IMyInterface
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
abstract class MyAbstract
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
enum EMyEnumeration
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
able
结尾。因此,如果Foo
是一个动作,则接口应命名为Fooable
。 - Rudi KershawCharSequence
、所有集合、各种DOM接口。 - Jon Skeet