有一个库提供类org.springframework.security.oauth2.provider.client.BaseClientDetails
我想把它包装成Lombok(或类似的)构建器。
目前,我派生了一个这样的包装类:
public static final class BaseClientDetailsWrapper
extends BaseClientDetails {
@Builder
private BaseClientDetailsWrapper(
final String clientId,
final List<String> resourceIds,
final List<GrantedAuthority> suthorities,
final List<String> scopes,
final List<String> autoApproveScopes,
final List<String> authorizedGrantTypes,
final String clientSecret) {
super();
setClientId(clientId);
setResourceIds(resourceIds);
setAuthorities(authorities);
setScope(scopes);
setAuthorizedGrantTypes(authorizedGrantTypes);
setAutoApproveScopes(autoApproveScopes);
setClientSecret(clientSecret);
}
}
有没有办法摆脱恼人的setXxx(...)代码?
答案 0 :(得分:0)
是否有更符合您需求的构造函数?不,没有办法要求Lombok将其他功能视为您无法控制的构建器模板。
作为旁注,没有必要对BaseClientDetails
进行细分。您可以将@Builder
放在任何函数上,无论它在哪个类中。以下是完全可以接受的:
@Builder(builderMethodName = "fullname")
private static String fullnameHelper(String forename, String middle, String surname) {
Objects.requireNonNull(forename);
Objects.requireNonNull(surname);
return forename + " " + (middle == null ? "" : middle + " ") + surname;
}
方法的名称根本不重要。如果需要,可以在实用程序类中私下隐藏它。您可以这样使用它:
fullname().forename("Alan").surname("Turing").build());
fullname().forename("Donald").middle("E.").surname("Knuth").build());