方法签名应以动词开头+宾语构成自注释命名,如saveUser();参数名需与方法名协同表意,如findUserById(long userId);需显式区分行为变体,如getCachedUserById();布尔方法加is/has/can前缀;禁用非公认缩写与拼音。

方法签名是调用者与实现者之间的第一道契约,命名是否清晰,直接决定别人能否不看方法体就理解“它做什么、要什么、给什么”。真正自注释的方法名,不需要额外注释就能传达核心语义。
动词开头 + 宾语结构,准确表达行为意图
方法名应以动词起始,紧接操作对象或目标,构成自然语言式的短语。这比抽象缩写或模糊名词更易理解。
- 用 saveUser() 而不是 doSave() 或 userOp1() —— “谁被保存”明确,“动作”明确
- 用 calculateTotalPriceWithDiscount() 而不是 calc() 或 getPrice() —— 包含关键业务逻辑(含折扣),避免歧义
- 避免中性词如 handle()、process()、execute(),除非上下文已极度明确;若必须用,需补全宾语,如 handlePaymentFailure()
参数名与方法名协同,共同构建完整语义
方法名和参数名是签名的两个组成部分,合起来应能读成一句通顺的话。参数不是“占位符”,而是语义拼图的关键块。
- 推荐:findUserById(long userId) → “根据用户ID查找用户”
- 不推荐:findUser(long id) → “id”未说明归属,“用户”还是“订单”?上下文缺失
- 业务场景强化:用 activateSubscriptionForCustomer(Customer customer) 替代 activate(Object obj),类型+名称双重提示
区分相似行为,用命名体现关键差异
同一类操作常有多个变体(同步/异步、校验/强制、缓存/直查)。命名必须显式暴露这些差异,否则极易误用。
立即学习“Java免费学习笔记(深入)”;
- getUserById(long id)(查库) vs getCachedUserById(long id)(查缓存)
- sendEmail(Email email)(发一次) vs resendFailedEmails(int maxRetries)(重试策略)
- 布尔方法加 is/has/can 前缀:isValidEmail(String email)、hasPermission(String action)、canRetry()
规避通用缩写与拼音,坚持完整英文语义
缩写虽短,但首次阅读需解码;拼音则完全切断语义链。方法签名是高频接触点,值得多敲几个字母换长期可读性。
- 用 convertCurrencyFromUsdToEur(),不用 convCurUSD2EUR()
- 用 generateInvoicePdf(),不用 genInvPdf() 或 shengChengFaPiaoPdf()
- 通用缩写仅限公认术语:URL、ID、XML、JSON、HTTP 等可接受;但 “usr”、“acc”、“cfg” 不属于此列


















