加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 包含现有数据值类的lombok构建器

发布时间:2020-12-15 02:18:10 所属栏目:Java 来源:网络整理
导读:有一个库提供了类,如org. springframework.security.oauth2.provider.client.BaseClientDetails,我想把它包装成一个Lombok(或类似的)构建器. 目前,我派生了一个这样的包装类: public static final class BaseClientDetailsWrapper extends BaseClientDetail
有一个库提供了类,如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(…)代码?

解决方法

是不是有更符合您需求的构造函数?不,没有办法要求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());

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读