tl;dr
前缀:
get…
和 set…
用于访问对象的简单状态,没有副作用或复杂性。
fetch…
和 submit
当访问对象涉及大量工作量、副作用或可能出现异常/空值时使用。
没有严格规定
没有关于命名这些方法的严格规则。
JavaBeans
“get”和“set”方法通常在Java中被广泛使用,符合JavaBeans规范传统。通常用于访问对象的简单状态,或该状态的计算/格式化形式,几乎没有副作用。副作用意味着影响其他状态或对象,这可能会给调用程序员带来不愉快的惊喜。
“fetch”和“submit”
对于我自己,当有相对较大量的工作需要完成时,例如数据库调用或返回值非常动态、快速变化,如数据源,或依赖于可能会发生变化的外部因素,例如调用到JNDI资源时,我使用前缀“fetch”。例如:
fetchCurrentMonthTimeSheets( java.time.YearMonth yearMonth )
另一方面,如果“set”类型的方法需要执行大量工作,具有副作用,或者其结果高度动态或不太可预测,则我使用“submit”作为前缀。例如:
submitTimeSheetForPayroll( TimeSheet timeSheet )
我还在可能出现null值或异常的情况下使用它们。get/set用于快速简单易用,而fetch/submit用于复杂重型情况。
java.time约定
Java 8及其后续版本中的
java.time框架的构建者在其命名约定方面投入了大量思考,如
Oracle教程所述。我可以想象其他库可能会遵循他们的指南。
他们定义了11个具有特定含义的词语。一些是实例方法,一些是静态(类)方法。java.time类避免使用
new
命令进行实例化,而是使用
静态工厂方法。
请记住,java.time专门使用
不可变对象进行清晰的逻辑和自动线程安全。当然,不总是适用于不可变性,因此此列表可能或可能不适合您自己的设计。
静态工厂方法
- of
创建一个实例,工厂主要验证输入参数,而不是转换它们。
- from
将输入参数转换为目标类的实例,可能会丢失输入信息。
- parse
解析输入字符串以生成目标类的实例。
实例方法
- format
使用指定的格式器将时间对象中的值格式化为字符串。
- get
返回目标对象状态的一部分。
- is
查询目标对象的状态。
- with
返回目标对象的副本,其中一个元素已更改;这是JavaBean上set方法的不可变等价物。
- plus
返回添加了一定时间量的目标对象的副本。
- minus
返回减去一定时间量的目标对象的副本。
- to
将此对象转换为另一种类型。
- at
将此对象与另一个对象组合。
示例用法
如果这些描述不够清晰,请查看
java.time类以了解它们的使用方法。以下是一些示例代码,使用了
to
、
of
、
at
、
with
和
get
。
从旧式过时的
java.util.Date
类转换为
java.time.Instant
。
Instant instant = myUtilDate.toInstant();
指定一个时区以获取一种新的对象,
ZonedDateTime
。
ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = instant.atZone( zoneId );
调整到另一个星期几。
ZonedDateTime followingTuesday = zdt.with( TemporalAdjustors.next( DayOfWeek.TUESDAY ) )
逐部分解释:年份、月份和日期。
int year = zdt.getYear();
int month = zdt.getMonthValue();
int dayOfMonth = zdt.getDayOfMonth();