gpt4 book ai didi

java - 从子类中重写的方法访问父类(super class)方法中的局部变量

转载 作者:行者123 更新时间:2023-11-30 07:18:10 25 4
gpt4 key购买 nike

在 Java 中是否有一种方法,通过反射或其他方式,从子类中对应的重写方法访问父类(super class)方法中声明的局部变量?

具体来说,我正在使用 Spring Security 的 DefaultLdapAuthoritiesPopulator。此类有一个名为 getAdditionalRoles 的方法,文档中说子类可以覆盖该方法以为用户返回额外的角色。

该类还实现了getGrantedAuthorities方法,实际上是调用了getAdditionalRoles方法。源代码看起来像这样:

public final GrantedAuthority[] getGrantedAuthorities(DirContextOperations user, String username) {
...
Set roles = getGroupMembershipRoles(userDn, username);

Set extraRoles = getAdditionalRoles(user, username);

...
}

此方法调用 getGroupMembershipRoles,它会执行 LDAP 搜索为此用户定义的组并将其存储在名为 roles 的本地变量中。现在,在我的 getAdditionalRoles 实现中,我还需要访问在 LDAP 中为此用户定义的组,因此我可以推断出该用户的其他角色。出于业务原因,我无法直接在 LDAP 中定义这些额外的角色。

我可以简单地继续自己实现 LdapAuthoritiesPopulator,但我想知道是否有其他方法,因为我真正需要的是访问本地 roles父类方法中的变量以避免我必须进行第二次 LDAP 搜索。

最佳答案

  1. 你不能访问其他方法中的变量,因为方法中的变量在方法返回后被删除。因为变量在堆栈中。
  2. 如果可能,您可以覆盖 getGroupMembershipRoles 并将 groups 存储为属性,并通过其他方法访问它。

关于java - 从子类中重写的方法访问父类(super class)方法中的局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15553593/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com