不止热门角色,我们为你扩展了更多细分角色分类,覆盖职场提升、商业增长、内容创作、学习规划等多元场景。精准匹配不同目标,让每一次生成都更有方向、更高命中率。
立即探索更多角色分类,找到属于你的增长加速器。
/**
特性与行为:
需要通过 {@link #evictExpired()} 主动淘汰。</li>
读操作({@link #get(Long)}、{@link #size()})持有读锁,允许并发读;写操作({@link #put(User, java.time.Duration)}、
{@link #evictExpired()}、{@link #evictById(Long)})持有写锁,互斥执行,确保与读操作的一致性。</li>
容量与清理:
{@code
{@code
/**
行为:
并发:在读锁下执行,允许与其他读操作并发。
/**
语义:
并发:在写锁下执行,与其他写操作互斥,并阻塞并发读以确保一致性。
/**
语义与边界:
并发:在写锁下执行,与读写操作互斥,保证移除期间的可见性与一致性。
/**
并发:在写锁下执行。
/**
注意:该数量可能包含已过期但尚未被 {@link #evictExpired()} 移除的条目。
并发:在读锁下执行。
/**
过期判断:
*/ static final class CacheEntry { final User user; final java.time.Instant expireAt;
/**
* 构造一个缓存条目。
*
* @param user 用户
* @param expireAt 过期时间点
*/
CacheEntry(User user, java.time.Instant expireAt) {
this.user = user;
this.expireAt = expireAt;
}
/**
* 判断条目是否已过期。
*
* <p>当且仅当 {@code Instant.now().isAfter(expireAt)} 时返回 {@code true}。
*
* @return 是否已过期
* @see java.time.Instant#isAfter(java.time.Instant)
*/
boolean isExpired() { return java.time.Instant.now().isAfter(expireAt); }
}
/**
相等性与哈希:
{@code
/**
* 构造函数。
*
* @param id 用户 ID,不能为空
* @param name 用户姓名,不能为空
* @param email 用户邮箱,不能为空
* @throws NullPointerException 当任一参数为 {@code null} 时抛出
*/
public User(Long id, String name, String email) {
this.id = java.util.Objects.requireNonNull(id, "id");
this.name = java.util.Objects.requireNonNull(name, "name");
this.email = java.util.Objects.requireNonNull(email, "email");
}
/**
* 返回用户 ID。
*
* @return 用户 ID
*/
public Long id() { return id; }
/**
* 返回用户姓名。
*
* @return 用户姓名
*/
public String name() { return name; }
/**
* 返回用户邮箱。
*
* @return 用户邮箱
*/
public String email() { return email; }
/**
* 基于 {@link #id()} 的相等性判断。
*
* @param o 待比较对象
* @return 当且仅当对象为 {@link User} 且 ID 相等时返回 {@code true}
*/
@Override public boolean equals(Object o) { if (this == o) return true; if (!(o instanceof User)) return false; User u=(User)o; return java.util.Objects.equals(id,u.id); }
/**
* 基于 {@link #id()} 的哈希值。
*
* @return 哈希值
*/
@Override public int hashCode() { return java.util.Objects.hash(id); }
} }
import java.util.*; import java.util.function.Function; import java.util.stream.Collectors;
/**
private CollectionUtils() {}
/**
/**
/**
/**
import java.math.BigDecimal; import java.time.Instant; import java.util.Collections; import java.util.HashMap; import java.util.Map; import java.util.Objects;
/**
{@code
.orderId("ORD-20250101-0001")
.payerId("USER-10086")
.amount(new BigDecimal("128.50")) // scale <= 2 且 > 0
.currency("USD") // 3 位大写字母(ISO 4217 形式)
.putMetadata("channel", "WEB")
.putMetadata("campaign", "BLACK_FRIDAY")
.build();
private PaymentRequest(Builder b) { this.orderId = b.orderId; this.amount = b.amount; this.currency = b.currency; this.payerId = b.payerId; this.createdAt = b.createdAt == null ? Instant.now() : b.createdAt; this.metadata = Collections.unmodifiableMap(new HashMap<>(b.metadata)); validate(); }
/**
/**
/**
/**
/**
/**
/**
/**
/**
/**
* 设置订单标识。必须非空且非空白,否则构建时会失败。
*
* @param orderId 订单 ID
* @return 本构建器
*/
public Builder orderId(String orderId) { this.orderId = orderId; return this; }
/**
* 设置支付金额。要求:
* - 金额必须大于 0;
* - 金额的小数位(scale)不超过 2。
* 不满足将导致构建时校验失败。
*
* @param amount 支付金额
* @return 本构建器
* @see BigDecimal#scale()
* @see BigDecimal#signum()
*/
public Builder amount(BigDecimal amount) { this.amount = amount; return this; }
/**
* 设置货币代码。必须是 3 位大写字母(ISO 4217 形式),否则构建时校验失败。
*
* @param currency 货币代码(如 USD、CNY、EUR)
* @return 本构建器
*/
public Builder currency(String currency) { this.currency = currency; return this; }
/**
* 设置付款人标识。必须非空且非空白,否则构建时会失败。
*
* @param payerId 付款人 ID
* @return 本构建器
*/
public Builder payerId(String payerId) { this.payerId = payerId; return this; }
/**
* 设置创建时间。若不设置或设置为 null,则构建时使用 {@link Instant#now()}。
*
* @param createdAt 创建时间戳
* @return 本构建器
* @see Instant#now()
*/
public Builder createdAt(Instant createdAt) { this.createdAt = createdAt; return this; }
/**
* 添加一条元数据键值对。键与值均不允许为 null。
*
* @param key 元数据键(不可为 null)
* @param value 元数据值(不可为 null)
* @return 本构建器
* @throws NullPointerException 当 key 或 value 为 null 时
*/
public Builder putMetadata(String key, String value) {
Objects.requireNonNull(key, "key");
Objects.requireNonNull(value, "value");
this.metadata.put(key, value);
return this;
}
/**
* 构建不可变的 {@link PaymentRequest} 实例。
* <p>
* 在构建过程中将执行字段合法性校验,若违反以下任一条件将抛出异常:
* - orderId 非空且非空白;
* - payerId 非空且非空白;
* - amount 非空,scale ≤ 2,且 > 0;
* - currency 匹配正则 {@code [A-Z]{3}}。
* 若未设置 createdAt,将自动取 {@link Instant#now()}。
*
* @return 构建完成的不可变 {@link PaymentRequest}
* @throws IllegalArgumentException 当参数不满足合法性约束时
*/
public PaymentRequest build() { return new PaymentRequest(this); }
} }
打造一套“即用即得”的Java类文档生成指令,帮助团队在真实开发流中:
请确认您是否已完成支付