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

时间:2017-01-24 11:00:29

标签: 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);
    }
}

有没有办法摆脱恼人的setXxx(...)代码?

1 个答案:

答案 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());