Builder 在 Builder 中拥有私有访问权限

rdm*_*ler 2 java builder

这段 Java 代码片段有什么问题?

ClientRegistration registration = new ClientRegistration.Builder(properties.getClientId())
        .authorizationUri(properties.getAuthorizationUri())
        .build();
Run Code Online (Sandbox Code Playgroud)

我收到以下错误消息,但不明白:

error: Builder(String) has private access in Builder
        ClientRegistration registration = new ClientRegistration.Builder(properties.getClientId())
                                          ^
Run Code Online (Sandbox Code Playgroud)

据我了解,此错误通常是由如下代码引起的:

ClientRegistration registration = new ClientRegistration().Builder(properties.getClientId())
Run Code Online (Sandbox Code Playgroud)

上面的代码是该问题的正确解决方案。但现在我遇到了相反的问题。

任何想法?

R. *_*ann 5

不能ClientRegistration.Builder使用关键字创建,new因为它的构造函数是私有的。

你应该是:

ClientRegistration.Builder builder = ClientRegistration.withRegistrationId(registrationIdAsString)
Run Code Online (Sandbox Code Playgroud)

ClientRegistration.Builder这为您创造了一个新的。

之后,您可以在 中设置字段ClientRegistration.Builder并调用.build()以获取您的ClientRegistration. 像那样:

ClientRegistration registration = builder.authorizationUri(properties.getAuthorizationUri())
    .build();
Run Code Online (Sandbox Code Playgroud)

查看构建器的 JavaDocs 以了解可以设置哪些属性: https ://docs.spring.io/spring-security/site/docs/5.0.x/api/org/springframework/security/oauth2/client /注册/ClientRegistration.Builder.html

或者在一行中,就像你所做的那样:

ClientRegistration registration = ClientRegistration.withRegistrationId(properties.getClientId())
    .authorizationUri(properties.getAuthorizationUri())
    .build();
Run Code Online (Sandbox Code Playgroud)