有一个库提供了类,例如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);
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法摆脱烦人的 setXxx(...) 代码?
\xe2\x80\x99 是否有更符合您需求的构造函数?不,无法要求 Lombok 将不受您控制的其他功能视为您的构建器模板。
\n\n附带说明一下,不需要对BaseClientDetails
. 您可以添加@Builder
任何函数,无论它属于哪个类。以下是完全可以接受的:
@Builder(builderMethodName = "fullname")\nprivate static String fullnameHelper(String forename, String middle, String surname) {\n Objects.requireNonNull(forename);\n Objects.requireNonNull(surname);\n return forename + " " + (middle == null ? "" : middle + " ") + surname;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n方法的名称根本不重要。如果需要,可以将其私下隐藏在实用程序类中。您可以这样使用它:
\n\nfullname().forename("Alan").surname("Turing").build());\nfullname().forename("Donald").middle("E.").surname("Knuth").build());\n
Run Code Online (Sandbox Code Playgroud)\n
归档时间: |
|
查看次数: |
1550 次 |
最近记录: |