围绕现有数据值类的 lombok 构建器

Adr*_*scu 6 java lombok

有一个库提供了类,例如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(...) 代码?

Mic*_*fel 1

\xe2\x80\x99 是否有更符合您需求的构造函数?不,无法要求 Lombok 将不受您控制的其他功能视为您的构建器模板。

\n\n
\n\n

附带说明一下,不需要对BaseClientDetails. 您可以添加@Builder任何函数,无论它属于哪个类。以下是完全可以接受的:

\n\n
@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\n
fullname().forename("Alan").surname("Turing").build());\nfullname().forename("Donald").middle("E.").surname("Knuth").build());\n
Run Code Online (Sandbox Code Playgroud)\n